问题陈述
我试图用来plotly.graph_objects.Heatmap
显示 (x, y, z) 值的数据集,其中 x 和 y 不在固定的矩形网格上。x 值在单个网格上等距分布,并且在每个 x 值处都有一个等距 y 网格。从一个 x 值到下一个 x 值,y 网格是任意不同的(开始、停止、数量,都可能不同)。所需的行为是一组以每个数据点为中心的连续矩形,其宽度由图上 x 的间距和每列中 y 的间距确定。
matplotlib
这是's 的样子imshow
:
的行为Heatmap
可以很容易地使用每个单元格的中心指定这种类型的绘图,但我错过了如何控制列的宽度。而不是我想要的宽度,所有的宽度都是 1。
第二个问题是我尝试这样做的方式(见下文)相当缓慢。
我试过的
为了制作上面的第二个图,我正在循环 x 值。对于每个值,我构建了一个重复 x 的数组,以匹配该列的 y 和 z 数组的长度,add_trace
这就是我的数字。这对我的情况来说是一种方便的构造,因为它确保 y 网格的间距适合每一列。但由于每条迹线中的参数都有一个重复值x
,因此宽度设置为 1。正如我上面所说,这也很慢。
我查看了 https://plot.ly/python/heatmaps 上的示例并阅读了https://plot.ly/python/reference/#heatmap上的文档。
我试图理解 x 值的替代x0
和dx
构造,但是关于这方面的文档对我来说并不清楚,经过一些实验后,我继续前进。
我还尝试使用该xgap
参数来缩小单元格宽度的外观,但由于这是以像素为单位的,它会破坏绘图的缩放行为。它也不会改变悬停工具所尊重的区域,这会破坏悬停行为。
最后,我还尝试构建一个包含pandas.DataFrame
所有 (x, y, z) 值以及我想要的悬停文本的单个。这更快,但看起来它试图使 y 轴与图中所有不同的 y 网格相称,从而导致看起来稀疏的非常细长的矩形数组。
最小的例子
理想情况下,我想找到一种快速且外观自然的方法来生成以下内容,其中 x 边界恰好落在 -0.25、0.25 和 0.75 处。
fig = go.Figure(
layout={
"xaxis": {"range": (-0.25, 0.75),
"tickvals": [-0.25, 0.25, 0.75]
}
)
fig.add_trace(
go.Heatmap(
x=[0, 0, 0],
y=[2, 4, 6],
z=[-1, 1, 0],
name="Name A",
)
)
fig.add_trace(
go.Heatmap(
x=[0.5, 0.5, 0.5],
y=[6.1, 6.4, 6.7],
z=[-1, 1, 2],
name="Name B",
)
)
fig.show()
有什么我可以轻松(或不那么容易)添加到上述结构中以将单元格宽度设置为 0.5 的东西吗?如果没有,我应该使用完全不同的结构吗?