如何在matplotlib散点图中显示每个日期的全部风力值
问题根因
- 现有代码取每个日期风力值时固定取索引为0的第一个元素,同日期下其余风力值完全没有被传入绘图逻辑
- 自定义的x轴坐标列表存在错误:重复写入
Thursday、遗漏了Tuesday - 遍历
df.groupby('Day')的分组结果时,没有使用分组返回的子数据集,整个循环逻辑没有实际作用
原错误代码运行效果:
修复后完整代码
import pandas as pd import matplotlib.pyplot as plt import numpy as np df = pd.DataFrame( { 'Day': ['Monday'] * 2 + ['Tuesday'] * 3 + ['Wednesday'] * 3 + ['Thursday'] * 3 + ['Friday'] * 3 + ['Saturday'] * 2 + ['Sunday'] *2, 'WindStrength': [1, 5, 4, 7, 3, 6, 8, 4, 2, 9, 8, 5, 2, 6, 7, 3, 8, 1], } ) # 固定x轴星期的显示顺序 day_order = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] # 将Day列转为有序分类,避免排序错乱 df['Day'] = pd.Categorical(df['Day'], categories=day_order, ordered=True) plt.figure(figsize=(8, 4)) for day_idx, day_name in enumerate(day_order): # 取出当前日期下所有风力值 wind_values = df[df['Day'] == day_name]['WindStrength'].values point_num = len(wind_values) # 给同一x位置的点添加±0.1范围内的水平偏移,避免点完全重叠 x_pos = np.linspace(-0.1, 0.1, point_num) + day_idx plt.scatter(x_pos, wind_values, s=30, marker='o', color='#1f77b4') # 替换x轴刻度为星期名称 plt.xticks(ticks=range(len(day_order)), labels=day_order) plt.xlabel('Day') plt.ylabel('WindStrength') plt.tight_layout() plt.show()
效果说明
代码运行后会完整展示所有数据:周一2个风力值、周二到周五各3个风力值、周六和周日各2个风力值,同一日期的点小幅错开不会重叠,所有数据点都可正常查看。
内容的提问来源于stack exchange,提问作者Olovia.solfjell
相关产品推荐
相关产品推荐

