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

如何基于Seaborn调整折线图代码,展示指定时段多组数据?

解决折线图合并与数据扩展问题

嘿,我来帮你搞定这个折线图的需求!你现在的代码生成两个独立图表,想要把Total和MGO放在同一张图里,还要加上2019全年和2020上半年的数据,咱们一步步来:

第一步:把两个系列合并到同一张图

不用分开调用两次plot,只需要先创建一个Matplotlib轴对象,然后把两个折线都画在这个轴上就行:

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

# 创建画布和轴对象,可指定画布大小
fig, ax = plt.subplots(figsize=(10, 6))  

# 在同一个轴上绘制两条折线,添加标签方便区分
Bunker2019_Jan_to_Jun.plot(x='2019', y='Total', ax=ax, label='Total', linewidth=2)
Bunker2019_Jan_to_Jun.plot(x='2019', y='MGO', ax=ax, label='MGO', linewidth=2)

# 美化图表细节
ax.legend(title='Bunker Type')  # 给图例添加标题
ax.set_xlabel('Date', fontsize=12)
ax.set_ylabel('Value', fontsize=12)
ax.set_title('2019 Jan-Jun Bunker Data', fontsize=14)
plt.xticks(rotation=45)  # 旋转日期标签避免重叠
plt.tight_layout()  # 自动调整布局,防止标签被截断
plt.show()

第二步:扩展数据到2019全年+2020上半年

首先你需要确保手里有2019年7-12月和2020年1-6月的数据集(假设它们的结构和Bunker2019_Jan_to_Jun一致,列名相同)。我们先把这些数据合并成一个完整的DataFrame,再画图:

1. 合并并整理数据

# 假设你有这两个额外的数据集:
# Bunker2019_Jul_to_Dec(2019年7-12月)、Bunker2020_Jan_to_Jun(2020年1-6月)
full_data = pd.concat([Bunker2019_Jan_to_Jun, Bunker2019_Jul_to_Dec, Bunker2020_Jan_to_Jun])

# 关键:把日期列转为datetime类型(如果还不是的话),否则x轴会乱序
full_data['2019'] = pd.to_datetime(full_data['2019'])
# 建议把日期列名改成通用的`date`,避免混淆2019/2020数据:
full_data.rename(columns={'2019': 'date'}, inplace=True)

2. 绘制完整数据的折线图

方法一:用Pandas Plot(延续你原来的写法)

fig, ax = plt.subplots(figsize=(12, 6))

full_data.plot(x='date', y='Total', ax=ax, label='Total', linewidth=2)
full_data.plot(x='date', y='MGO', ax=ax, label='MGO', linewidth=2)

# 美化设置
ax.legend(title='Bunker Type')
ax.set_xlabel('Date', fontsize=12)
ax.set_ylabel('Bunker Value', fontsize=12)
ax.set_title('Bunker Data: 2019 Full Year & 2020 Jan-Jun', fontsize=14)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

方法二:用Seaborn Lineplot(更适合分类数据)

如果把数据转成长格式,Seaborn的lineplot会更简洁,也更符合Seaborn的使用习惯:

# 把宽格式数据转成长格式(melt),方便Seaborn识别分类
melted_data = full_data.melt(id_vars='date', value_vars=['Total', 'MGO'], 
                             var_name='Bunker Type', value_name='Value')

# 用Seaborn绘制折线图
plt.figure(figsize=(12, 6))
sns.lineplot(data=melted_data, x='date', y='Value', hue='Bunker Type', linewidth=2)

# 美化设置
plt.xlabel('Date', fontsize=12)
plt.ylabel('Value', fontsize=12)
plt.title('Bunker Data: 2019 Full Year & 2020 Jan-Jun', fontsize=14)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

重要注意事项

  • 确保所有数据集的列名完全一致,否则合并时会出现缺失列的错误;
  • 日期列必须是datetime类型,不然x轴会按字符串排序,导致时间顺序混乱;
  • 如果2020年的日期列名不是2019,合并前一定要重命名成统一的(比如date),避免数据错位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 00:27:32