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

绘制带分组类别重叠的Pandas DataFrame图表,查看最高得分类别

按类别重叠可视化Pandas DataFrame,快速找出高分类别

没问题!我来帮你搞定这个需求——把你的DataFrame按类别做重叠绘图,不同类别用不同颜色,还能一眼看出哪个类别得分最高。先从整理数据开始,再给你两种实用的实现方案:

第一步:先把你的DataFrame处理好

你给的原始代码里有几个小细节需要调整:比如得分列是字符串类型,日期列也需要转成datetime格式,还有最后一行的['...']得去掉。修正后的代码如下:

import pandas as pd

# 构造正确的DataFrame
df = pd.DataFrame(
    [
        ['101', '2018-03-29', 'Smooth', '9.0'],
        ['102', '2018-03-29', 'Hard', '1.0'],
        ['103', '2018-03-30', 'Narrow', '1.1'],
        ['104', '2018-04-30', 'Sharp', '2.0'],
        ['105', '2018-04-21', 'Narrow', '2.2']
    ],
    columns=['ID', 'Date', 'Category', 'Score']
)

# 转换数据类型:日期转datetime,得分转数值
df['Date'] = pd.to_datetime(df['Date'])
df['Score'] = df['Score'].astype(float)

方法1:用Matplotlib手动控制绘图(灵活度高)

如果你想自定义每个类别的颜色,用Matplotlib是最佳选择。我们用散点图来重叠显示不同类别的数据,设置透明度避免点重叠看不清:

import matplotlib.pyplot as plt

# 获取所有唯一类别
categories = df['Category'].unique()
# 自定义颜色(你可以换成自己喜欢的配色)
colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728']

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

# 遍历每个类别,绘制散点图
for cat, color in zip(categories, colors):
    cat_data = df[df['Category'] == cat]
    plt.scatter(cat_data['Date'], cat_data['Score'], label=cat, color=color, s=80, alpha=0.7)

# 添加图表细节
plt.xlabel('日期')
plt.ylabel('得分')
plt.title('各类别得分分布(重叠显示)')
plt.legend(title='类别')
plt.grid(True, alpha=0.3)
plt.xticks(rotation=45)  # 旋转日期标签避免重叠

plt.tight_layout()
plt.show()

如果你的数据是时间序列的连续值,把scatter换成plot就能改成折线图,同样支持重叠显示。

方法2:用Seaborn快速实现(代码简洁)

Seaborn会自动给不同类别分配颜色,代码更短,适合快速出图:

import seaborn as sns

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

# 用hue参数指定按类别区分颜色
sns.scatterplot(data=df, x='Date', y='Score', hue='Category', s=80, alpha=0.7)

# 同样添加图表细节
plt.xlabel('日期')
plt.ylabel('得分')
plt.title('各类别得分分布(重叠显示)')
plt.legend(title='类别')
plt.grid(True, alpha=0.3)
plt.xticks(rotation=45)

plt.tight_layout()
plt.show()

额外补充:快速对比每个类别的最高分

如果想更直接看出哪个类别得分最高,可以加一个条形图展示每个类别的最高分:

# 计算每个类别的最高分
max_scores = df.groupby('Category')['Score'].max().reset_index()

plt.figure(figsize=(8,5))
sns.barplot(data=max_scores, x='Category', y='Score', palette='viridis')

plt.xlabel('类别')
plt.ylabel('最高分')
plt.title('各类别最高分对比')
plt.show()

这样就能一眼看到Smooth类别得分最高啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:03:11