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

如何用Python Matplotlib区分X轴两列日期的颜色值并高亮指定日期?

解决Matplotlib中高亮第二列日期点并区分X轴日期颜色的问题

看来你想要给Matplotlib图表做两个关键调整:用不同颜色高亮Date2对应的数值点,同时给X轴上的Date1和Date2日期刻度设置不同颜色。我来一步步帮你实现这个需求:

第一步:确保日期数据是datetime类型

Matplotlib对日期的处理依赖于datetime格式,所以先把你的Date1和Date2列转换为datetime类型(如果还没转的话):

import pandas as pd
import matplotlib.pyplot as plt

# 处理日期格式(假设原始数据存在df中)
df['Date1'] = pd.to_datetime(df['Date1'])
df['Date2'] = pd.to_datetime(df['Date2'])

# 保留并完善你的现有代码
df1 = df[df['ID'] == 1]
df1 = df1.sort_values(by='Date1')
date1 = df1['Date1']
values = df1['value']  # 注意:你的原代码写的是`values`,但数据表格列名是`value`,要保持一致

第二步:绘制基础折线图并高亮Date2的点

先画出Date1对应的折线和普通点,然后用醒目的样式(比如红色大圆点)高亮Date2对应的点:

fig, ax = plt.subplots(figsize=(10, 6))

# 绘制Date1的折线+默认点
ax.plot(date1, values, 'o-', color='steelblue', label='Date1 数据点')

# 高亮Date2的点:用scatter绘制红色带边框的大圆点
ax.scatter(df1['Date2'], values, color='crimson', s=120, edgecolor='black', label='Date2 高亮点')

# 添加图表基础元素
ax.set_xlabel('日期')
ax.set_ylabel('数值')
ax.set_title('数值趋势图(Date2 高亮标记)')
ax.legend()

第三步:区分X轴上Date1和Date2的刻度颜色

要给X轴刻度设置不同颜色,需要遍历刻度对象,判断每个刻度对应的日期是否属于Date2,再分别设置样式:

# 获取X轴所有刻度标签对象
xticks = ax.get_xticklabels()
# 把Date2的日期转为date集合,方便快速判断
date2_unique = set(df1['Date2'].dt.date)

# 逐个设置刻度颜色
for tick in xticks:
    # 将刻度文本转为date对象
    tick_date = pd.to_datetime(tick.get_text()).date()
    if tick_date in date2_unique:
        tick.set_color('crimson')
        tick.set_weight('bold')  # 加粗让高亮刻度更醒目
    else:
        tick.set_color('steelblue')

# 自动旋转X轴日期标签,避免重叠
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

额外细节提示

  • 如果Date2的日期不在Date1的范围内,Matplotlib默认不会生成该日期的刻度,你可以手动添加:ax.set_xticks(ax.get_xticks().tolist() + df1['Date2'].tolist()),再执行上面的颜色设置逻辑。
  • 你可以调整scatter的s参数改变高亮点大小,edgecolor参数给点加边框,进一步提升辨识度。

内容的提问来源于stack exchange,提问作者Fed_driv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:03:15