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

如何在Plotly中绘制单根普通条形与堆叠条形并列的图表

解决方案

核心问题说明

你之前的实现无法达到效果的核心原因是维度对齐错误:要实现单根独立条形+旁边单根堆叠条形的效果,需要把X轴设置为两个类别:[第一名国家名称, '其他国家'],第一名的数值对应第一个分类位置,所有要堆叠的剩余国家数值都对应第二个分类位置,开启堆叠模式后会自动在第二个分类位置叠成一根堆叠条。

完整可运行代码

import plotly.graph_objects as go
import pandas as pd

# 你已经实现的拆分函数
def find_next_series_equivalent(series):
  primary = series[0]
  if series[1:-1].sum() > primary:
    i = 2
    while series[1:i].sum() < primary:
      i += 1
    return series[1:i]
  else:
    return series[1:-1]

# -------------- 数据处理 --------------
# 拿到国家计数Series
CountryCounts = OGdf['Country'].value_counts()
top_country = CountryCounts.index[0]
top_count = CountryCounts.iloc[0]
# 拿到要堆叠的剩余国家数据,也可直接用 CountryCounts[1:] 取所有剩余国家
stack_countries = find_next_series_equivalent(CountryCounts)

# -------------- 绘图 --------------
fig = go.Figure()

# 添加第一名的独立条形
fig.add_trace(go.Bar(
    x = [top_country],
    y = [top_count],
    name = top_country,
    hovertemplate = f"国家:{top_country}<br>数量:%{{y}}<extra></extra>"
))

# 批量添加堆叠的其他国家条形,所有条目x轴都设置为"其他国家"
for country, cnt in stack_countries.items():
    fig.add_trace(go.Bar(
        x = ["其他国家"],
        y = [cnt],
        name = country,
        hovertemplate = f"国家:{country}<br>数量:%{{y}}<extra></extra>"
    ))

# 可选补充:如果要堆叠条总长度和第一名对齐,添加剩余未展示国家的条目
remaining_cnt = top_count - stack_countries.sum()
if remaining_cnt > 0:
    fig.add_trace(go.Bar(
        x = ["其他国家"],
        y = [remaining_cnt],
        name = "其他更小国家",
        hovertemplate = f"国家:其他更小国家<br>数量:{remaining_cnt}<extra></extra>"
    ))

# 配置布局
fig.update_layout(
    barmode = "stack",
    xaxis_title = "分类",
    yaxis_title = "数量",
    title = "国家分布统计"
)

fig.show()

效果说明

运行代码后会得到符合你要求的图表:

  • X轴有两个条形,第一个是第一名国家的独立条形,第二个是其他国家组成的堆叠条形
  • 堆叠条形的每一段对应不同国家、展示不同颜色,悬停时可查看对应国家的具体数值
  • 开启补充的对齐逻辑后,堆叠条总长度会和第一名的条形长度一致,更方便对比占比

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:06:01