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

如何按WeekDay与WeekNo绘制月度发生次数折线图?

实现按周区分的星期次数折线图

嘿,这需求很清晰,我用Python的pandas处理数据,seaborn+matplotlib来绘图,完全能满足你的要求!下面是一步步的实现方案:

步骤1:数据准备与预处理

首先我们把你的数据整理成DataFrame,并且统一星期几的格式并指定顺序——这很重要,不然x轴的星期会乱序显示。比如把缩写的Wed、Thursd等补全,然后设置成有序的类别:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 模拟你的数据(如果是真实数据,直接用pd.read_csv读取即可)
data = [
    ["2018-01-01", 214.0, "Monday", 1, 2018, 1],
    ["2018-01-02", 232.0, "Tuesday", 1, 2018, 1],
    ["2018-01-03", 147.0, "Wed", 1, 2018, 1],
    ["2018-01-04", 257.0, "Thursd", 1, 2018, 1],
    ["2018-01-05", 164.0, "Friday", 1, 2018, 1],
    ["2018-01-06", 187.0, "Saturd", 1, 2018, 1],
    ["2018-01-07", 201.0, "Sunday", 1, 2018, 1],
    ["2018-01-08", 141.0, "Monday", 2, 2018, 1],
    ["2018-01-09", 152.0, "Tuesday", 2, 2018, 1],
    ["2018-01-10", 167.0, "Wednesd", 2, 2018, 1],
    ["2018-01-15", 113.0, "Monday", 3, 2018, 1],
    ["2018-01-16", 139.0, "Tuesday", 3, 2018, 1],
    ["2018-01-17", 159.0, "Wednesd", 3, 2018, 1],
    ["2018-01-18", 202.0, "Thursd", 3, 2018, 1],
    ["2018-01-19", 207.0, "Friday", 3, 2018, 1]
]

df = pd.DataFrame(data, columns=["date", "value", "WeekDay", "WeekNo", "Year", "Month"])

# 统一星期几的名称,避免缩写导致的混乱
weekday_map = {
    "Monday": "Monday",
    "Tuesday": "Tuesday",
    "Wed": "Wednesday",
    "Wednesd": "Wednesday",
    "Thursd": "Thursday",
    "Friday": "Friday",
    "Saturd": "Saturday",
    "Sunday": "Sunday"
}
df["WeekDay"] = df["WeekDay"].map(weekday_map)

# 设置星期的顺序,确保x轴从周一到周日排列
weekday_order = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
df["WeekDay"] = pd.Categorical(df["WeekDay"], categories=weekday_order, ordered=True)

步骤2:绘制折线图

用seaborn.lineplot可以轻松实现按WeekNo区分颜色的折线,自动生成图例,代码非常简洁:

# 设置绘图风格
sns.set_style("whitegrid")

# 创建画布
plt.figure(figsize=(10, 6))

# 绘制折线图:x轴是WeekDay,y轴是value,按WeekNo区分颜色
sns.lineplot(
    data=df,
    x="WeekDay",
    y="value",
    hue="WeekNo",  # 按周数区分颜色
    marker="o",    # 显示每个数据点
    linewidth=2    # 设置折线宽度
)

# 添加标题和轴标签
plt.title("2018年1月各周每日发生次数变化", fontsize=14)
plt.xlabel("星期", fontsize=12)
plt.ylabel("发生次数", fontsize=12)

# 调整图例位置,避免遮挡图形
plt.legend(title="周数", bbox_to_anchor=(1.05, 1), loc="upper left")

# 自动调整布局,防止标签被截断
plt.tight_layout()

# 显示图形
plt.show()

效果说明

  • 不同的WeekNo会用不同颜色的折线表示,图例里会标注对应的周数
  • x轴严格按照周一到周日的顺序排列,不会出现乱序
  • 每个数据点用圆形标记,方便查看具体数值位置
  • 如果你的数据里有缺失的日期(比如1月11-14日),对应的位置不会有折线连接,完全符合实际数据情况

内容的提问来源于stack exchange,提问作者J.Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:58:44