我正在尝试使用plotly.graph_objects.Heatmap
来显示(x,y,z)值的数据集,其中x和y不在固定的矩形网格上。 x值在单个网格上等距分布,并且在每个x值处都有一个等距的y网格。 y个网格从一个x值到下一个x值是任意不同的(开始,停止,编号,所有值可能都不同)。所需的行为是一组以每个数据点为中心的连续矩形,其宽度由图上的x间距和每列内y间距确定。
这是matplotlib
的{{1}}的样子:
imshow
的行为使得使用每个单元格的中心来指定这种类型的绘图变得容易,但是我缺少如何控制列的宽度。而不是我想要的宽度,所有宽度都是1。
第二个问题是我尝试执行此操作的方式(参见下文)相当慢。
要绘制上面的第二张图,我要遍历x值。对于每个值,我都会构建一个数组,该数组重复x以匹配该列的y和z数组的长度,并将其Heatmap
固定在我的图中。对于我的情况,这是一种方便的构造,因为它可以确保y网格的间距适合每列。但是,由于每个跟踪中的add_trace
参数只有一个重复值,因此宽度被设置为1。正如我上面所说,这也很慢。
我已经查看了https://plot.ly/python/heatmaps上的示例,并阅读了https://plot.ly/python/reference/#heatmap上的文档。
我试图理解x值的交替x
和x0
的构造,但是关于此的文档对我来说并不明确,经过一些试验后,我继续进行。
我还尝试使用dx
参数来减少单元格宽度的外观,但是由于它以像素为单位,因此破坏了绘图的缩放行为。它还不会更改悬停工具所尊重的区域,这会破坏悬停行为。
最后,我还尝试构建一个包含所有(x,y,z)值以及所需的悬浮文本的xgap
。这是更快的方法,但是看起来它试图使y轴与图中所有不同的y网格相称,从而导致看起来稀疏的非常瘦的矩形阵列。
理想情况下,我想找到一种快速自然的方法来生成以下内容,其中x边界恰好落在-0.25、0.25和0.75。
pandas.DataFrame
在上面的结构中是否可以方便地添加(或不那么容易)以将单元格宽度设置为0.5?如果没有,我应该使用完全不同的结构吗?
答案 0 :(得分:1)
确定,您可以按照以下说明使用现有的x0
和dx
参数,并注意以下几点:
z
不再是[a,b,c]
,而是[[a],[b],[c]]
,因为x0
/ dx
仅适用于z
作为二维数组。 coloraxis="coloraxis1"
,以便它们共享颜色空间和颜色条。您可以在layout.coloraxis1
中配置该颜色空间/颜色条。代码:
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(
go.Heatmap(
x0=0,dx=0.5,
y=[2, 4, 6],
z=[[-1], [1], [0]],
name="Name A",
coloraxis="coloraxis1"
)
)
fig.add_trace(
go.Heatmap(
x0=0.5,dx=0.5,
y=[6.1, 6.4, 6.7],
z=[[-1], [1], [2]],
name="Name B",
coloraxis="coloraxis1"
)
)
fig.update_layout(coloraxis1=dict(
colorscale="Plasma"
))
fig.show()
输出如下: