Python 绘图时,x轴和y轴的比例相同

Python 绘图时,x轴和y轴的比例相同,python,plotly,Python,Plotly,我正在使用plotly for python,无法设置x和y轴,以便它们具有相同的比例: 以下是我的布局: layout=layout( xaxis=xaxis( 范围=[-150150], showgrid=True, 零线=真, showline=True, gridcolor='#bdbdbd', gridwidth=2, zerolinecolor='#9696', 零线宽=4, linecolor='#636363', 线宽=6 ), yaxis=yaxis( 范围=[-150150]

我正在使用plotly for python,无法设置
x
y
轴,以便它们具有相同的比例:

以下是我的布局:

layout=layout(
xaxis=xaxis(
范围=[-150150],
showgrid=True,
零线=真,
showline=True,
gridcolor='#bdbdbd',
gridwidth=2,
zerolinecolor='#9696',
零线宽=4,
linecolor='#636363',
线宽=6
),
yaxis=yaxis(
范围=[-150150],
showgrid=True,
零线=真,
showline=True,
gridcolor='#bdbdbd',
gridwidth=2,
zerolinecolor='#9696',
零线宽=4,
linecolor='#636363',
线宽=6
)
)
然后我得到了这样的东西

为什么x和y的刻度不同?这会影响我的形象


如何获得带有方形单元格的网格

您可以为布局中的高度和宽度指定相同的长度。以下是一个例子:

layout = Layout(
    xaxis=XAxis(
       range=[-150, 150],
       showgrid=True,
       zeroline=True,
       showline=True,
       gridcolor='#bdbdbd',
       gridwidth=2,
       zerolinecolor='#969696',
       zerolinewidth=4,
       linecolor='#636363',
       linewidth=6
    ),
    yaxis=YAxis(
        range=[-150,150],
        showgrid=True,
        zeroline=True,
        showline=True,
        gridcolor='#bdbdbd',
        gridwidth=2,
        zerolinecolor='#969696',
        zerolinewidth=4,
        linecolor='#636363',
        linewidth=6
   ),
   height=600,
   width=600,
)

@内达的答案只适用于x和y的相等范围——这很少是事实。这似乎是很多人都在要求的,就像matplotlib的轴(“相等”)。看

现在,我分别对两个范围使用一个乘数-基本上定义每个单位长度在每个轴上的长度

height=(yMax - yMin) * mul
width= (xMax - xMin) * mul

即使这样做,网格也不是一个100%的完美正方形。

最后,实现了此功能

layout = go.Layout(yaxis=dict(scaleanchor="x", scaleratio=1))
更新:在plotly的新版本中,请使用以下命令:

fig.update_yaxes(
    scaleanchor = "x",
    scaleratio = 1,
  )
参见此处示例。

ml\u mx=max(曲线)
ml_mn=min(曲线)
ap_mx=最大值(曲线2)
ap_mn=最小值(曲线2)
如果ml_mx>ap_mx:
mx=ml\u mx
其他:
mx=ap_mx
如果ml\u mn
是否有一种方法可用于三维打印?我试过
go.Layout(zaxis=dict(scaleanchor=“x”,scaleratio=1))
但是没有用。@Ray看到这个:,这个:但是,这也限制了缩放交互工具只能是方形的。它看起来像是被更新了:
fig.update\u yaxes(scaleanchor=“x”,scaleratio=1)
注意,如果有图例的话,这不起作用,因为图例也占用了这600个像素中的一些@Brut的答案更可靠。虽然这段代码可以回答这个问题,但最好在不介绍其他人的情况下解释它是如何解决问题的,以及为什么要使用它。从长远来看,只使用代码的答案是没有用的。
ml_mx = max(Curve)
ml_mn = min(Curve)
ap_mx = max(Curve2)
ap_mn = min(Curve2)

if ml_mx > ap_mx:
    mx = ml_mx
else:
    mx = ap_mx

if ml_mn < ap_mn:
    mn = ml_mn
else:
    mn = ap_mn

mx = mx + mx * 0.2
mn = mn - mn * 0.2

fig_graficas.update_yaxes(
    range = [mn,mx]
)
fig_graficas.update_xaxes(
    range = [mn,mx]
)