袖扣:如何设置色标的上限值和下限值?

Cufflinks: how to set upper and lower value for the colorscale?

假设我有一个包含袖扣热图的 DataFrame(如 this one)。

一般情况下,我是这样画的。请注意,我通过名称 'spectral'.

指定了预设色标
heatmap.iplot(kind='heatmap', title='title', colorscale='spectral', xTitle='xTitle', yTitle='yTitle')

它显示了一个热图,但色标的值范围(不是颜色,而是色标映射到的 min/max 值)是自动确定的。

我希望能够指定 min/max 值,以便将最冷的颜色映射到最小值,将最热的颜色映射到最大值。我的用例是我有多个颜色图可以相互比较,我需要它们具有相同的值<->色标映射,以便这些热图之间的值差异从颜色上显而易见。

顺便说一句,我不想​​手动指定色标内的所有颜色映射,因为这意味着我需要首先了解色标 'spectral' 如何将哪些值映射到哪些颜色。

简短的回答:你不能直接用 cufflinks 来做,因为 zminzmax 不是关键字参数。

长答案:转换您的 DataFrame 很简单,但获得与 cufflinks 相同的色标有点棘手(当两个名称相同的色标具有不同的映射时不是很有趣吗?)

df.iplot(kind='heatmap')

等同于

plotly.offline.iplot([go.Heatmap(z=df.transpose().values)])

所以现在我们可以通过zminzmax

设置colorscale的上限和下限
plotly.offline.iplot([go.Heatmap(z=df.transpose().values, zmin=0, zmax=40)])

现在让我们从 cufflinks 中提取色标并将其提供给我们的热图

scale = cf.get_scales()['spectral']
l = len(scale) - 1
spectral = [[i / l, s] for i, s in enumerate(scale)]

plotly.offline.iplot([go.Heatmap(z=df.transpose().values, 
    zmin=0, 
    zmax=40, 
    colorscale=spectral
)])

完整代码

import cufflinks as cf
import plotly
plotly.offline.init_notebook_mode()
import plotly.graph_objs as go

cf.go_offline()
df = cf.datagen.heatmap(20,20)
df.iplot(kind='heatmap', colorscale='spectral')

scale = cf.get_scales()['spectral']
l = len(scale) - 1
spectral = [[i / l, s] for i, s in enumerate(scale)]

plotly.offline.iplot([go.Heatmap(z=df.transpose().values, zmin=0, zmax=40, colorscale=spectral)])