Plotly不等长x和y轴表面图

4
我有一个10x12的数组,希望使用plotly进行绘图。x轴的长度为10,y轴的长度为12。我期望绘图在x轴上有10的范围,在y轴上有12的范围。但实际情况并非如此。在两个轴上都只得到了10。我已经提供了一个MWE来重现这个问题。
import numpy as np
import plotly.graph_objects as go

data_array = np.empty((10, 12))
for i in range(10):
    for j in range(12):
        data_array[i, j] = i+j

x = np.linspace(1, 10, 10)
y = np.linspace(1, 12, 12)

fig = go.Figure(data=[go.Surface(z=data_array, x=x, y=y)])
fig.show()

它生成的图表是 输入图像描述
我已尝试通过update_layout设置range,但这并未解决问题。
import numpy as np
import plotly.graph_objects as go

data_array = np.empty((10, 12))
for i in range(10):
    for j in range(12):
        data_array[i, j] = i+j

x = np.linspace(1, 10, 10)
y = np.linspace(1, 12, 12)

fig = go.Figure(data=[go.Surface(z=data_array, x=x, y=y)])
fig.update_layout(scene=dict(xaxis=dict(range=[0, 10]),
                             yaxis=dict(range=[0, 12])))
fig.show()

enter image description here

尽管y轴范围现在从0到12,但是图表的那一部分并没有绘制任何内容。 我该如何解决这个问题?谢谢。
根据下面的答案,我已经改变了代码。
import numpy as np
import plotly.graph_objects as go

data_array = np.empty((10, 12))
for idx1, i in enumerate(range(0, 50, 5)):
    for idx2, j in enumerate(range(0, 24, 2)):
        data_array[idx1, idx2] = (i+j) / (50+24)

x = np.linspace(0, 45, 10)
y = np.linspace(0, 22, 12)

fig = go.Figure(data=[go.Surface(z=data_array.T)])
fig.show()

但是现在的坐标轴与实际的x和y值没有对应关系。图中的值从0到9和0到11分别表示x和y轴。我该如何设置校准?谢谢。
1个回答

1

矩阵 data_array 应该转置(x 沿列,y 沿行)。可以通过传递 xy 参数来明确设置限制。代码如下:

import numpy as np
import plotly.graph_objects as go

data_array = np.empty((10, 12))
for idx1, i in enumerate(range(0, 50, 5)):
    for idx2, j in enumerate(range(0, 24, 2)):
        data_array[idx1, idx2] = (i+j) / (50+24)

x = np.linspace(0, 45, 10)
y = np.linspace(0, 22, 12)

fig = go.Figure(data=[go.Surface(z=data_array.T, x=x, y=y)])
fig.show()

我目前无法保存带有最后位置标签的图片。获得的图片如下:

enter image description here

文档:https://plotly.com/python/3d-surface-plots/

(该文档介绍了3D表面图的绘制方法,适用于Python编程语言。)

非常感谢您的回复。我的数据与整数没有一一对应关系。换句话说,每个点的x轴值增加5,y轴增加2。即x=np.linspace(1, 50, 10)y=np.linspace(1, 24, 12)。我该如何让这反映在绘图的坐标轴上? - learner
为了进一步澄清上面的评论,我在我的问题末尾添加了另一段代码。 - learner
我最初错过了那部分。我已经修改了我的答案以支持不同的步长。希望能有所帮助 :) - sotmot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接