如何使用Plotly.express将3D散点图坐标轴固定在(0,0,0)原点
Plotly.express 3D散点图固定坐标轴交汇于(0,0,0)实现方案
Plotly 没有和 matplotlib 完全同名的 xlim/ylim 参数,坐标轴范围、原点交汇效果都可以通过布局配置实现,具体操作如下:
- 首先修正基础代码的错误:3D散点图需要调用
scatter_3d方法,不能使用2D散点的scatter接口,基础绘图代码参考:
import plotly.express as px # 3D散点图需传入x/y/z三个维度的字段 fig = px.scatter_3d( data_frame=data, x="X", y="Y", z="Z" )
- 手动指定三个坐标轴的数值范围,强制轴起点为0:默认坐标轴从-200起步是Plotly自动给数据集加的留白边距,通过
update_layout下的scene配置项可以自定义各轴范围,效果等价于matplotlib的轴范围设置:
# 提前计算三个维度的最大值,作为坐标轴上限 x_max = data["X"].max() y_max = data["Y"].max() z_max = data["Z"].max() fig.update_layout( scene = dict( xaxis = dict(range=[0, x_max]), yaxis = dict(range=[0, y_max]), zaxis = dict(range=[0, z_max]), ) )
- 可选配置:如果需要强化原点交汇的显示效果,可以额外开启零刻度线显示,调整视角让原点更突出:
fig.update_layout( scene = dict( xaxis = dict( range=[0, x_max], zeroline=True, zerolinewidth=2, zerolinecolor='#333333' ), yaxis = dict( range=[0, y_max], zeroline=True, zerolinewidth=2, zerolinecolor='#333333' ), zaxis = dict( range=[0, z_max], zeroline=True, zerolinewidth=2, zerolinecolor='#333333' ), # 调整视角,避免坐标轴遮挡 camera_eye=dict(x=1.2, y=1.2, z=1.2) ) )
配置完成后调用fig.show()渲染图表,即可得到X/Y/Z三轴交汇于(0,0,0)原点的3D散点图,不会再出现坐标轴从-200起步的默认留白问题。
内容的提问来源于stack exchange,提问作者Ankur Kumar
相关产品推荐
相关产品推荐

