假设我有一个包含袖扣热图的DataFrame(如this one)。
通常情况下,我会用以下方式绘制它。请注意,我使用名称“spectrum”指定了预设色阶。
heatmap.iplot(kind='heatmap', title='title', colorscale='spectral', xTitle='xTitle', yTitle='yTitle')
它显示了热图,但是色阶的值范围(不是颜色,而是色阶映射到的最小/最大值)是自动决定的。
我希望能够指定最小/最大值,以便最冷的颜色映射到最小值,最热的颜色映射到最大值。我的用例是我有多个颜色图可以相互比较,我需要它们具有相同的值< - >色阶映射,以便这些热图中的值差异从颜色中显而易见。
顺便说一句,我不想手动指定色阶内的所有颜色映射,因为这意味着我需要先弄清楚色阶'光谱'如何映射哪些颜色到什么颜色。
答案 0 :(得分:3)
简短回答:您不能直接使用cufflinks
来执行此操作,因为zmin
和zmax
不是关键字参数。
答案很长:转换你的DataFrame很简单,但是得到与cufflinks
相同的色阶有点棘手(当两个同名的颜色标签有不同的映射时,这不是很有趣吗?)
df.iplot(kind='heatmap')
与
相同plotly.offline.iplot([go.Heatmap(z=df.transpose().values)])
现在我们可以通过colorscale
和zmin
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)])