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

如何在趋势图表中仅展示日和月维度并实现可视化

解决仅展示日/月维度的每日趋势图表问题

我来帮你搞定这个需求,你已经找对了方向,只是在字符串处理和绘图逻辑上需要调整下,给你两种实用的解决方案:

方法一:直接用原日期列,隐藏年份(推荐)

这种方式不用额外创建变量,直接借助日期格式化工具让x轴只显示日和月,同时保留日期的天然顺序,是最省心的做法:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import pandas as pd

# 先确保数据按日期排序(这一步很重要,避免绘图顺序混乱)
df = df.sort_values('date')

# 绘制趋势图
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(df['date'], df['trend_value'])  # 这里trend_value替换成你的数值列名

# 设置x轴仅显示日和月,格式为「日-月」
date_formatter = mdates.DateFormatter('%d-%m')
ax.xaxis.set_major_formatter(date_formatter)

# 旋转x轴标签避免重叠
plt.xticks(rotation=45)
plt.xlabel('Day-Month')
plt.ylabel('Trend Value')
plt.title('Daily Trend (Day-Month Only)')
plt.tight_layout()
plt.show()

方法二:创建正确排序的Day_Month字符串标签

如果你一定要用自定义的Day_Month变量,需要解决两个核心问题:字符串拼接的完整性和日期顺序的正确性(直接拼接无格式的字符串会导致排序混乱,比如"1-10"会排在"1-2"前面):

import pandas as pd
import matplotlib.pyplot as plt

# 第一步:确保数据按日期排序(核心前提!)
df = df.sort_values('date')

# 第二步:用strftime生成带前导零的日-月字符串(比如"01-01"、"01-02")
df['Day_Month'] = df['date'].dt.strftime('%d-%m')

# 现在绘图,x轴会严格按日期顺序展示
plt.figure(figsize=(10, 6))
plt.plot(df['Day_Month'], df['trend_value'])
plt.xticks(rotation=45)
plt.xlabel('Day-Month')
plt.ylabel('Trend Value')
plt.title('Daily Trend (Day-Month Only)')
plt.tight_layout()
plt.show()

你之前尝试遇到问题的原因

  1. 字符串拼接代码不完整,正确写法应该是 df['Day_Month'] = df['Day'].astype(str) + "-" + df['Month'].astype(str),但这种方式生成的字符串没有前导零,排序时会出现逻辑错误;
  2. 直接把这类字符串转日期类型,Python会自动补默认年份(比如1900),反而违背了你「忽略年份」的需求;
  3. 如果数据没有预先按日期排序,即使字符串看起来正确,绘图时的顺序也会混乱。

内容的提问来源于stack exchange,提问作者Efrat Amir-Caspi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:59:45