袖扣:如何设置色阶的上下值?

时间:2017-02-18 02:01:30

标签: ipython-notebook jupyter-notebook heatmap plotly

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

通常情况下,我会用以下方式绘制它。请注意,我使用名称“spectrum”指定了预设色阶。

heatmap.iplot(kind='heatmap', title='title', colorscale='spectral', xTitle='xTitle', yTitle='yTitle')

它显示了热图,但是色阶的值范围(不是颜色,而是色阶映射到的最小/最大值)是自动决定的。

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

顺便说一句,我不想​​手动指定色阶内的所有颜色映射,因为这意味着我需要先弄清楚色阶'光谱'如何映射哪些颜色到什么颜色。

1 个答案:

答案 0 :(得分:3)

简短回答:您不能直接使用cufflinks来执行此操作,因为zminzmax不是关键字参数。

答案很长:转换你的DataFrame很简单,但是得到与cufflinks相同的色阶有点棘手(当两个同名的颜色标签有不同的映射时,这不是很有趣吗?)

df.iplot(kind='heatmap')

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

现在我们可以通过colorscalezmin

设置zmax的上下范围
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)])