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

按月份为散点图数据点着色的实现问题求助

按月份为散点图数据点着色的实现问题求助

我现在遇到了个小麻烦,想给小时粒度的时序数据散点图按月份分色,结果运行自己写的代码后直接报错了,恳请大家帮忙看看问题出在哪!

我的需求是这样的:我有一个包含日期列和数值列的DataFrame,日期跨度从2015到2024,数据是每小时一条的,条目特别多。我想用散点图展示这些数据,并且让每个数据点根据所属的月份显示不同的颜色——比如不管哪一年,1月的数据都标红,2月的数据标成中紫罗兰色,以此类推每个月份对应专属颜色。

我自己尝试写了下面的代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime as dt

start_date = '2014-01-01'
end_date = '2016-02-01'
data_range = pd.date_range(start=start_date, end=end_date, freq ='H')
values = np.random.randint(-100,101, size = len(data_range))
df = pd.DataFrame({'date': data_range,'Preis [€/MWh]': values})

df['month'] = df['date'].dt.month
df['month_name'] = df['date'].dt.month_name(locale='German')
colors = {'Januar': 'red','Februar': 'mediumvioletred', 'März': 'darkviolet', 'April': 'blueviolet','Mai': 'blue','Juni': 'cadeblue', 'Juli': 'green', 'August':'greenyellow', 'September': 'yellow', 'Oktober': 'gold', 'November': 'orange', 'Dezember': 'coral'}
df['colors'] = df['month_name'].map(colors)

plt.scatter(df['date'], df['Preis [€/MWh]'], color = df['colors'])

结果运行这段代码的时候直接报错了,完全搞不清哪里出问题了,有没有大佬能指点一下怎么修复呀?提前谢谢大家了!


补充修正方案(供参考)

我后来自己排查了下,发现是颜色字典里的拼写错误导致的:Juni对应的cadeblue是错的,正确的Matplotlib颜色名是cadetblue。修正这个错误后代码就能正常运行了,另外还可以优化一下图表的可读性,比如调整点的大小、添加标签和旋转日期刻度:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime as dt

start_date = '2014-01-01'
end_date = '2016-02-01'
data_range = pd.date_range(start=start_date, end=end_date, freq='H')
values = np.random.randint(-100, 101, size=len(data_range))
df = pd.DataFrame({'date': data_range, 'Preis [€/MWh]': values})

df['month'] = df['date'].dt.month
df['month_name'] = df['date'].dt.month_name(locale='German')
# 修正颜色拼写错误,同时确保所有颜色都是Matplotlib可识别的名称
colors = {
    'Januar': 'red', 'Februar': 'mediumvioletred', 'März': 'darkviolet',
    'April': 'blueviolet', 'Mai': 'blue', 'Juni': 'cadetblue',
    'Juli': 'green', 'August': 'greenyellow', 'September': 'yellow',
    'Oktober': 'gold', 'November': 'orange', 'Dezember': 'coral'
}
df['colors'] = df['month_name'].map(colors)

# 绘制优化后的散点图
plt.figure(figsize=(12, 6))
plt.scatter(df['date'], df['Preis [€/MWh]'], color=df['colors'], s=8)
plt.xlabel('Datum')
plt.ylabel('Preis [€/MWh]')
plt.title('Strompreis pro Monat (farbcodiert)')
plt.xticks(rotation=45)
plt.tight_layout()  # 自动调整布局,避免标签被截断
plt.show()

如果担心颜色名称拼写出错,也可以直接使用十六进制颜色码,比如把cadetblue换成#5F9EA0,这样更稳妥哦。

备注:内容来源于stack exchange,提问作者Horst-Jackson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 14:05:29