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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 23:24:25