You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 05:21:27