如何为Plotly Express条形图添加次Y轴?
给Plotly分组条形图添加第二个Y轴显示市民数量
要实现给现有分组条形图添加第二个Y轴以显示整数格式的市民数量,你需要在Plotly Express生成的图表基础上手动扩展,以下是完整的实现代码和说明:
import plotly.express as px import plotly.graph_objects as go # 假设你的DataFrame包含名为`city_population`的列,存储对应城市的市民数量 fig = px.bar(df, x="country", y="pourcent_visit", color="city", barmode='group') # 为每个城市添加绑定到第二个Y轴的市民数量数据(这里用折线图避免与原条形图重叠) for city in df['city'].unique(): city_subset = df[df['city'] == city] fig.add_trace(go.Scatter( x=city_subset['country'], y=city_subset['city_population'], name=f"{city} 市民数量", yaxis="y2", mode="markers+lines", marker=dict(size=8) )) # 配置第二个Y轴的样式与格式 fig.update_layout( yaxis2=dict( title="市民数量", overlaying="y", side="right", tickformat="d", # 设置为整数显示格式 showgrid=False # 隐藏右侧网格,避免视觉混乱 ), yaxis=dict(title="访问百分比"), # 调整图例位置,避免遮挡图表 legend=dict(orientation="h", yanchor="bottom", y=1.02, xanchor="right", x=1) ) fig.show()
核心要点:
- Plotly Express本身不直接支持多Y轴,因此需要用
plotly.graph_objects的add_trace方法添加新的数据系列,并指定yaxis="y2"绑定到第二个Y轴。 - 选择折线图展示市民数量是为了避免与原分组条形图视觉重叠,若偏好条形图,可将
go.Scatter替换为go.Bar,但需额外调整barmode参数避免重叠。 tickformat="d"确保右侧Y轴的市民数量以整数格式显示,不会出现小数。- 若你的DataFrame中市民数量的列名不是
city_population,请替换为实际列名。
内容的提问来源于stack exchange,提问作者Sara
相关产品推荐
相关产品推荐

