从 ColumnDataSource 列中提取最大值和最小值

问题描述

我正在做一个 bokeh 应用程序,其中有一个输入表,对其执行一些计算并生成一个新表。我正在尝试绘制这个新表的热图,所以我必须使用 LinearColorMapper 函数创建一个颜色条,但是我不能使用计算表(这是一个 ColumnDataSource)中的最小值和最大值,这是如何表存储:

def val_portafolio_mostrar():
  val_portafolio=datos_calcular()
  val_mapa=pd.DataFrame(val_portafolio.stack(),columns=['valoracion']).reset_index()
  datos_heatmap.data=dict(val_mapa)

将要绘制在热图上的值位于 datos_heatmap 的“valoracion”列中,这是我用于 LinearColorMapper 的代码

colors = ["#75968f","#a5bab7","#c9d9d3","#e2e2e2","#dfccce","#ddb7b1","#cc7878","#933b41","#550b1d"]
mapper = LinearColorMapper(palette=colors,low=min(datos_heatmap.data['valoracion']),high=max(datos_heatmap.data['valoracion']))

但是我收到以下错误

in mapper_fun
    mapper = LinearColorMapper(palette=colors,ValueError: min() arg is an empty sequence

我认为这是因为为了访问 ColumnDataSource 值,该函数需要具有“source”参数,但是 LinearColorMapper 函数没有此参数,因此无法通过这种方式解决它。我还尝试将最大值和最小值存储在另一个 ColumnDataSource 中,但出现相同的错误,因为我没有使用源,而只是像“datos_heatmap.data['valoracion']”中那样提取值

提前致谢!

解决方法

我想问题是,您的 Protected Overrides Sub OnStop() ' Add code here to perform any tear-down necessary to stop your service. My.Application.Log.WriteEntry("ServiceABC shutting down for device " & DeviceID) ServiceTimer.enable = false If DataRetrievalBackgroundWorker.IsBusy Then DataRetrievalBackgroundWorker.CancelAsync() Dim x As Integer = 0 While ((DataRetrievalBackgroundWorker.IsBusy) Or (x < 15)) Threading.Thread.Sleep(1000) x += 1 End While End If End Sub 确实是一个空序列。请在此处使用 minimal example 提供更多信息,并在将 datos_heatmap.data['valoracion'] 传递给 datos_heatmap.data['valoracion'] 之前尝试打印它。如果您使用 python 函数,请确保您的定义在您希望它们存在的命名空间中是正确的。
检查以下示例,它的工作方式与您希望的相同:

LinearColorMapper

这会产生以下图: enter image description here