绘图,x 和 y 轴的比例相同
Posted
技术标签:
【中文标题】绘图,x 和 y 轴的比例相同【英文标题】:Plotly, same scale for x and y axis 【发布时间】:2015-09-11 01:59:02 【问题描述】:我正在为 python 使用 plotly,我无法设置 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
)
)
然后我得到这样的东西!
为什么 x 和 y 的比例不同?这会影响我的可视化。
如何获得带有方形单元格的网格?
【问题讨论】:
【参考方案1】:您可以在布局中为 height 和 width 分配相同的长度。这是一个例子:
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,
)
【讨论】:
请注意,如果有图例,这将不起作用,因为图例也占用了这 600 像素中的一部分。 @Brut 的回答更可靠。【参考方案2】:@neda 的答案仅适用于 x 和 y 上的相等范围 - 这种情况很少见。这似乎是很多人都在要求的东西,比如 matplotlib 的轴('equal')。见https://github.com/plotly/plotly.py/issues/70
现在,我分别对两个范围使用乘数 - 基本上定义了每个单位长度在每个轴上的长度。
height=(yMax - yMin) * mul
width= (xMax - xMin) * mul
即使这样做,网格也不是 %100 完美的正方形..
【讨论】:
【参考方案3】:终于实现了这个功能。
layout = go.Layout(yaxis=dict(scaleanchor="x", scaleratio=1))
更新:在新版本的 plotly 中,使用以下内容:
fig.update_yaxes(
scaleanchor = "x",
scaleratio = 1,
)
在此处查看示例https://plot.ly/python/axes/#fixed-ratio-axes。
【讨论】:
有没有办法为 3D 绘图做到这一点?我试过go.Layout(zaxis=dict(scaleanchor="x", scaleratio=1))
,但没用。
@Ray 看到这个:community.plot.ly/t/…,这个:plot.ly/python/3d-axes
但是,这也限制了缩放交互工具只能是方形的。
好像更新了:fig.update_yaxes(scaleanchor = "x", scaleratio = 1)
【参考方案4】:
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]
)
【讨论】:
虽然这段代码可以回答这个问题,但最好在不介绍其他代码的情况下解释它是如何解决问题的,以及为什么要使用它。从长远来看,纯代码的答案没有用处。以上是关于绘图,x 和 y 轴的比例相同的主要内容,如果未能解决你的问题,请参考以下文章