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

如何在Python中绘制以DataFrame索引为折线的折线图?

实现按Bin分组的月度均值折线图

核心思路

你的DataFrame结构是索引为Bin分组,列代表月份(nr_1、nr_2...),要让每个Bin对应一条折线,需要先调整数据结构,让月份作为X轴维度,Bin作为折线系列。


方法一:用Pandas直接转置绘制

这是最简便的方式,通过转置DataFrame,让月份成为X轴刻度,每个Bin自动对应一条折线:

import pandas as pd
import matplotlib.pyplot as plt

# 替换为你的实际DataFrame
df = pd.DataFrame(
    {
        'nr_1': [5.2, 6.8, 8.1],
        'nr_2': [5.5, 7.0, 8.3],
        'nr_3': [5.7, 7.2, 8.5],
        'nr_4': [6.0, 7.5, 8.8]
    },
    index=['bin_0-10', 'bin_10-20', 'bin_20-30']
)

# 转置DataFrame:行变列,列变行
df_transposed = df.T

# 绘制折线图
df_transposed.plot(kind='line', figsize=(10, 6), marker='o')

# 自定义坐标轴与样式
plt.xlabel('月份')
plt.ylabel('均值')
plt.title('各Bin分组月度均值趋势')
plt.legend(title='Bin分组')
plt.grid(True, alpha=0.3)

plt.show()

方法二:转成长格式用Seaborn绘制

如果需要更灵活的样式控制或后续扩展分析,可以将数据转成长格式,再用Seaborn绘制:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 替换为你的实际DataFrame
df = pd.DataFrame(
    {
        'nr_1': [5.2, 6.8, 8.1],
        'nr_2': [5.5, 7.0, 8.3],
        'nr_3': [5.7, 7.2, 8.5],
        'nr_4': [6.0, 7.5, 8.8]
    },
    index=['bin_0-10', 'bin_10-20', 'bin_20-30']
)

# 转成长格式:将Bin索引转为列,月份和均值拆分为单独列
df_long = df.reset_index().melt(
    id_vars='index', 
    var_name='月份', 
    value_name='均值'
)

# 绘制折线图
plt.figure(figsize=(10, 6))
sns.lineplot(data=df_long, x='月份', y='均值', hue='index', marker='o')

# 自定义样式
plt.xlabel('月份')
plt.ylabel('均值')
plt.title('各Bin分组月度均值趋势')
plt.legend(title='Bin分组')
plt.grid(True, alpha=0.3)

plt.show()

关键说明

  • 转置操作df.T:直接互换原DataFrame的行与列,快速让月份成为X轴,Bin成为折线系列。
  • 长格式转换:通过reset_index()+melt()将宽表转成适合统计可视化的长表,更适合复杂场景。
  • 样式调整:可以通过plot()或lineplot()的参数自定义折线颜色、标记点、线宽等,比如添加color=['#FF5733', '#33FF57', '#3357FF']指定折线颜色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 10:00:11