Plotly控制坐标轴相对长度 实现等同Matlab pbaspect的正方形绘图
Plotly设置绘图为正方形(等效Matlab
pbaspect([1 1 1]))的解决方案 你之前使用的scaleanchor+scaleratio=1的作用是让两个坐标轴的数值单位对应的物理长度相等,比如x轴每1个数值单位对应的像素长度和y轴完全一致。如果x轴数值范围是010、y轴是0100,那么y轴的物理长度会自动变成x轴的10倍,自然无法得到正方形的绘图区域。
以下是不同场景下的可用解决方案:
2D笛卡尔坐标图
方案1:动态计算scaleratio适配数值范围
无需手动调整整张图片尺寸,根据两个轴的数值范围差调整scaleratio即可实现绘图区域1:1等长:
# 也可以用fig.full_figure_for_development()获取Plotly自动生成的轴范围 x_range = fig.layout.xaxis.range[1] - fig.layout.xaxis.range[0] y_range = fig.layout.yaxis.range[1] - fig.layout.yaxis.range[0] fig.update_yaxes( scaleanchor = "x", scaleratio = y_range / x_range )
方案2:直接约束轴的绘制区域比例
不需要计算数值范围,直接限制两个轴的绘制区域(domain)比例为1:1:
fig.update_layout( xaxis = {"constrain": "domain"}, yaxis = {"scaleanchor": "x", "constrain": "domain"} )
如果需要整张输出图片也为正方形,可额外添加配置:
fig.update_layout(width=500, height=500)
数值可根据需要自由调整,保持宽高相等即可。
3D坐标图
直接设置场景的坐标轴比例模式为立方体即可,完全等效Matlab的pbaspect([1 1 1])效果:
fig.update_layout( scene = { "aspectmode": "cube" } )
内容的提问来源于stack exchange,提问作者AkariYukari
相关产品推荐
相关产品推荐

