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

如何用Seaborn绘制多线图展示各品牌汽车HP分布?

解决多品牌汽车马力分布多线图绘制问题

1. 数据准备(示例)

先模拟你的DataFrame结构:

import pandas as pd

data = {
    'Brand': ['VW', 'Audi', 'Audi', 'VW', 'VW', 'Ford', 'KIA', 'Audi', 'Audi', 'VW', 'VW'],
    'Model': ['Golf 7', 'A4', 'A5', 'Passat', 'Polo', 'A4', 'A4', 'Q3', 'S6', 'Golf 6', 'Golf 5'],
    'Power in HP': [150, 190, 190, 240, 80, 190, 190, 150, 400, 140, 116]
}
df = pd.DataFrame(data)

2. 方法一:使用Seaborn Lineplot(推荐)

Seaborn的lineplot可通过hue参数直接按品牌分组绘图,关键是先处理x轴避免型号名称重复导致的混乱:

import seaborn as sns
import matplotlib.pyplot as plt

# 按品牌分组,组内按马力升序排序
df_sorted = df.groupby('Brand').apply(lambda x: x.sort_values('Power in HP')).reset_index(drop=True)

# 给每个品牌内的型号分配序号作为x轴(解决不同品牌型号重名问题)
df_sorted['Model_Index'] = df_sorted.groupby('Brand').cumcount()

# 绘制多线图
plt.figure(figsize=(10, 6))
sns.lineplot(data=df_sorted, x='Model_Index', y='Power in HP', hue='Brand', marker='o')

# 设置图表样式
plt.xlabel('同品牌内型号序号(按马力排序)')
plt.ylabel('马力(HP)')
plt.title('各品牌汽车型号马力分布')
plt.legend(title='品牌')
plt.show()

如果想直接显示型号名称作为x轴,可调整如下(注意旋转标签避免重叠):

plt.figure(figsize=(12, 6))
sns.lineplot(data=df_sorted, x='Model', y='Power in HP', hue='Brand', marker='o')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

3. 方法二:使用Matplotlib手动分组绘图

若偏好手动控制绘图逻辑,可按品牌分组后循环绘制:

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

# 按品牌分组并逐个绘制
for brand, group in df.groupby('Brand'):
    sorted_group = group.sort_values('Power in HP')
    plt.plot(sorted_group['Model'], sorted_group['Power in HP'], marker='o', label=brand)

# 设置图表样式
plt.xlabel('型号')
plt.ylabel('马力(HP)')
plt.title('各品牌汽车型号马力分布')
plt.legend()
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

常见问题说明

  • 之前groupby失败可能是因为直接传入分组对象给绘图函数,而非结构化的排序后DataFrame;
  • 直接传列到lineplot失败通常是因为x轴用了重复的型号名称,导致不同品牌的数据点重叠,无法形成清晰的线条。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 04:31:18