x和y轴长度不相等的平面图

时间:2020-11-08 07:04:59

标签: python-3.x plotly

我有一个10x12数组,我想使用plotly进行绘制。 x轴的长度为10,y轴的长度为12。我希望该图在x轴上的范围为10,在y-axis中的范围为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()

它生成的图是enter image description here

我尝试通过range设置update_layout不能解决问题。

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

尽管从现在到12月的y轴范围,在该图的该部分中没有绘制任何内容。 我该如何工作?谢谢。

根据以下答案,我更改了代码。

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值不对应。对于x和y轴,图中的值分别从0到9和0到11。如何设置校准?谢谢。

1 个答案:

答案 0 :(得分: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/