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

如何为pandas DataFrame的每一行单独绘制带百分比标注的折线图

实现代码(基于Matplotlib)

直接复制运行即可,会自动生成2行5列的子图展示所有折线图,也支持修改为单独导出每张图:

import pandas as pd
import matplotlib.pyplot as plt

# 先构造你的DataFrame,如果你已经有df变量可以直接跳过这一段
data = {
    'mean_1': [3.8, 3.266667, 2.516667, 2.833333, 2.933333, 2.7, 2.7, 2.766667, 4.0, 4.216667],
    'mean_2': [3.8, 3.333333, 3.2, 3.366667, 3.516667, 3.416667, 3.233333, 3.316667, 4.083333, 4.9],
    'mean_3': [3.898305, 3.491525, 3.338983, 3.661017, 3.610169, 3.677966, 6.593220, 6.610169, 7.322034, 8.067797],
    'mean_4': [4.067797, 3.864407, 3.593220, 3.932203, 4.067797, 4.033898, 6.966102, 6.881356, 7.423729, 8.169492],
    'Average Percent Change': [7.05, 15.93, 12.29, 16.8, 15.67, 18.07, 115.45, 107.48, 81.81, 66.72]
}
df = pd.DataFrame(data, index=['Q33','Q35','Q37','Q39','Q41','Q43','Q45','Q47','Q52','Q54'])

# 配置X轴标签
x_labels = ['mean_1', 'mean_2', 'mean_3', 'mean_4']
# 子图布局:2行5列,可根据需求调整
fig, axes = plt.subplots(nrows=2, ncols=5, figsize=(20, 8))
# 把axes展平成一维数组方便遍历
axes = axes.flatten()

# 遍历每一行数据绘图
for idx, (row_idx, row) in enumerate(df.iterrows()):
    ax = axes[idx]
    # 提取Y轴数值
    y_vals = [row['mean_1'], row['mean_2'], row['mean_3'], row['mean_4']]
    # 画折线图,加标记点
    ax.plot(x_labels, y_vals, marker='o', color='#2E86AB', linewidth=2)
    # 设置标题,这里默认用index值,你可以换成自己的匹配表,比如title_dict[row_idx] = '自定义标题'
    ax.set_title(row_idx, fontsize=12)
    # 设置Y轴标签
    ax.set_ylabel('测量值', fontsize=10)
    # 标注百分比变化,放在右侧区域
    pct = row['Average Percent Change']
    ax.text(1.02, 0.5, f'变化率:\n{pct}%', transform=ax.transAxes, 
            bbox=dict(facecolor='white', alpha=0.8, pad=3), va='center')

# 调整子图间距,避免标注和标题重叠
plt.tight_layout()
# 展示图表,也可以换成plt.savefig('all_line_charts.png', dpi=300, bbox_inches='tight')保存为图片
plt.show()

# ---------------如果需要单独导出每张图,用下面的代码替换上面的子图部分即可---------------
# for row_idx, row in df.iterrows():
#     fig, ax = plt.subplots(figsize=(6,4))
#     y_vals = [row['mean_1'], row['mean_2'], row['mean_3'], row['mean_4']]
#     ax.plot(x_labels, y_vals, marker='o', color='#2E86AB', linewidth=2)
#     # 自定义标题可以在这里改
#     ax.set_title(row_idx, fontsize=14)
#     ax.set_ylabel('测量值', fontsize=12)
#     pct = row['Average Percent Change']
#     ax.text(1.02, 0.5, f'变化率:\n{pct}%', transform=ax.transAxes, 
#             bbox=dict(facecolor='white', alpha=0.8, pad=3), va='center')
#     plt.tight_layout()
#     # 按index命名保存,也可以自定义文件名
#     plt.savefig(f'{row_idx}_line_chart.png', dpi=300, bbox_inches='tight')
#     plt.close()
功能说明
  • 默认采用2行5列的子图布局集中展示所有10张折线图,也提供了单独导出每张图的备选代码段
  • 标题默认取行索引值(Q33/Q35等),如果需要自定义标题,提前构造索引和标题的映射字典,将ax.set_title(row_idx)替换为ax.set_title(自定义字典[row_idx])即可
  • 百分比变化值自动标注在每张图右侧空白区,添加白色半透明背景保证不同背景下都清晰可读
  • 支持导出为高清本地图片,将plt.show()替换为对应的保存代码即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:36:02