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

基于Plotly实现总量占比与细分群体占比的柱状图方案问询

报纸发行量可视化优化方案(Plotly实现)

核心优化思路

结合堆叠柱状图保留绝对发行量量级的优势,通过自定义标注突出三个关键占比,同时用颜色分层区分不同区域的发行量:

  • 堆叠柱体:用不同颜色区分「非美国发行量」「美国非加州发行量」「加州发行量」,直观展示各报纸的总发行量及结构
  • 双侧标注:
    • 柱子左侧:标注总发行量+加州占总发行量的比例
    • 柱子右侧:标注美国发行量+美国占总发行量的比例+加州占美国发行量的比例

完整实现代码

import pandas as pd
import plotly.express as px

# 原始数据
data = {
    'Name': ['Paper A', 'Paper B'],
    'Total circ': [1000000, 800000],
    'US circ': [500000, 200000],
    'CA': [100000, 100000]
}
df = pd.DataFrame.from_dict(data)

# 计算拆分的发行量部分
df['not US'] = df['Total circ'] - df['US circ']
df['not CA'] = df['US circ'] - df['CA']

# 计算三个关键占比(格式化百分比)
df['US_pct_total'] = (df['US circ'] / df['Total circ']).apply(lambda x: f"{x:.0%}")
df['CA_pct_US'] = (df['CA'] / df['US circ']).apply(lambda x: f"{x:.0%}")
df['CA_pct_total'] = (df['CA'] / df['Total circ']).apply(lambda x: f"{x:.0%}")

# 创建堆叠柱状图
fig = px.bar(
    df,
    x='Name',
    y=['not US', 'not CA', 'CA'],
    color_discrete_map={
        'not US': '#e0e0e0',  # 浅灰:非美国发行量
        'not CA': '#93c5fd',  # 浅蓝:美国非加州发行量
        'CA': '#2563eb'       # 深蓝:加州发行量
    },
    labels={'value': '发行量', 'variable': '发行量区域'},
    title='报纸全球/美国/加州发行量及占比分析'
)

# 添加左侧标注:总发行量 + 加州占总比例
for idx, row in df.iterrows():
    fig.add_annotation(
        x=row['Name'],
        y=row['Total circ'] / 2,  # 垂直居中
        xshift=-80,  # 向左偏移
        text=f"总发行量:{row['Total circ']/10000:.1f}万\nCA占总:{row['CA_pct_total']}",
        showarrow=False,
        font={'size': 10}
    )

# 添加右侧标注:美国发行量 + 美国占总比例 + 加州占美国比例
for idx, row in df.iterrows():
    fig.add_annotation(
        x=row['Name'],
        y=row['Total circ'] / 2,  # 垂直居中
        xshift=80,  # 向右偏移
        text=f"US发行量:{row['US circ']/10000:.1f}万\nUS占总:{row['US_pct_total']}\nCA占US:{row['CA_pct_US']}",
        showarrow=False,
        font={'size': 10}
    )

# 布局优化:调整图例位置、y轴范围
fig.update_layout(
    legend=dict(orientation='h', yanchor='bottom', y=1.02, xanchor='right', x=1),
    yaxis_range=[0, df['Total circ'].max() * 1.1],  # y轴预留空间避免标注遮挡
    margin=dict(l=120, r=120)  # 左右边距适配标注
)

fig.show()

效果说明

  1. 绝对量展示:堆叠柱体的高度直接对应报纸总发行量,不同颜色块清晰区分非美国、美国非加州、加州的发行量规模
  2. 占比信息突出:双侧标注集中展示三个关键比例,无需额外计算即可快速获取各层级占比关系
  3. 批量适配性:代码可直接扩展到更多报纸数据,标注会自动匹配每个报纸的数值,便于批量分析趋势

内容的提问来源于stack exchange,提问作者eschares

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:00:59