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

如何使用Matplotlib复刻含多分组变量的目标统计图?

使用Matplotlib复刻目标统计图的解决方案

以下是基于你提供的数据,用Python Matplotlib实现堆叠柱状图(适配多系列年份统计图的常见样式)的完整代码,你可以根据目标图的细节调整样式:

步骤1:导入依赖并准备数据

先将你提供的R格式数据转换为Python可处理的结构,用pandas管理数据更便捷:

import matplotlib.pyplot as plt
import pandas as pd

# 你的原始数据
data = {
    'year': (1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,
             1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,
             2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,
             2018,2019,2020,2021,2022),
    'LS4': (0,5,0,0,0,0,0,0,0,0,
            0,0,0,0,0,0,0,0,0,0,
            0,0,0,0,0,0,0,0,0,0,
            0,0,0,0,0),
    'LS5': (35,45,37,29,23,32,46,35,47,40,
            52,55,46,38,0,6,47,41,45,43,
            42,49,29,25,0,0,0,0,0,0,
            0,0,0,0,0),
    'LS7': (0,0,0,0,0,0,0,0,0,0,
            0,3,20,24,43,33,42,27,25,26,
            26,38,23,23,28,34,50,56,49,52,
            51,57,54,48,49),
    'LS8': (0,0,0,0,0,0,0,0,0,0,
            0,0,0,0,0,0,0,0,0,0,
            0,0,0,0,0,33,60,61,58,53,
            58,60,55,53,49),
    'LS9': (0,0,0,0,0,0,0,0,0,0,
            0,0,0,0,0,0,0,0,0,0,
            0,0,0,0,0,0,0,0,0,0,
            0,0,0,6,52),
    'obs': (35,50,37,29,23,32,46,35,47,40,
            52,58,66,62,43,39,89,68,70,69,
            68,87,52,48,28,67,110,117,107,105,
            109,117,109,107,150)
}

# 转换为DataFrame
df = pd.DataFrame(data)
years = df['year']
# 提取需要堆叠的系列
series = ['LS4', 'LS5', 'LS7', 'LS8', 'LS9']

步骤2:绘制堆叠柱状图+总和折线图

如果你的目标图是用堆叠柱状图展示各LS系列,同时用折线展示总观测数obs,可以用以下代码:

plt.figure(figsize=(12, 6))

# 初始化底部位置,用于堆叠
bottom = [0]*len(years)

# 为每个系列绘制柱状图,设置不同颜色
colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd']
for idx, col in enumerate(series):
    plt.bar(years, df[col], bottom=bottom, label=col, color=colors[idx])
    # 更新底部位置
    bottom = [b + df[col].iloc[i] for i, b in enumerate(bottom)]

# 绘制obs总和折线图
plt.plot(years, df['obs'], marker='o', color='black', linewidth=2, label='总观测数(obs)')

# 设置图表样式
plt.xlabel('年份', fontsize=12)
plt.ylabel('数量', fontsize=12)
plt.title('各LS系列年度数量分布', fontsize=14, pad=15)
plt.legend(loc='upper left', bbox_to_anchor=(1, 1))  # 把图例放在图表外侧
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.xticks(rotation=45)  # 旋转年份标签避免重叠

plt.tight_layout()
plt.show()

样式调整说明

如果你需要匹配目标图的细节,可以修改以下部分:

  • 颜色:替换colors列表中的十六进制颜色码,和目标图一致
  • 图例位置:调整loc和bbox_to_anchor参数,或者放在图表内部
  • 坐标轴范围:用plt.ylim()设置y轴的上下限
  • 柱状图宽度:在plt.bar()中添加width参数(比如width=0.8)
  • 折线样式:修改marker(比如换成s方形)、linestyle(比如'--'虚线)等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:37:53