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

如何根据绘制值颜色修改Matplotlib时间轴刻度标签颜色?

实现x轴刻度标签颜色与对应数据点颜色匹配

数据示例

DATE   TMAX       QUANTILE_TMAX_90   QUANTILE_TMAX_95   QUANTILE_TMAX_99
50415 2019-01-01  19.2               19.5               20.2               21.8
50416 2019-01-02  17.4               19.5               20.2               21.8
50417 2019-01-03  17.2               19.5               20.2               21.8
50418 2019-01-04  16.4               19.5               20.2               21.8
50419 2019-01-05  17.4               19.5               20.2               21.8
         ...   ...                ...                ...                ...
50500 2019-03-27  16.2               19.0               19.8               21.4
50501 2019-03-28  13.6               19.0               19.8               21.4
50502 2019-03-29  15.2               19.0               19.8               21.4
50503 2019-03-30  16.2               19.0               19.8               21.4
50504 2019-03-31  18.8               19.0               19.8               21.4

[90 rows x 5 columns]

原问题分析

已实现按规则为数据点和连线着色:

  • TMAX > QUANTILE_TMAX_99:红色
  • TMAX > QUANTILE_TMAX_95:橙色
  • TMAX > QUANTILE_TMAX_90:黄色
  • 其余:黑色

但修改x轴刻度标签颜色时失败,原因有两点:

  1. 未对axis_colors赋值,导致列表为空
  2. Matplotlib默认自动筛选x轴刻度,并非每个日期都显示,刻度标签与数据点无法直接一一对应

解决方案

完整修改代码

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

# 生成每个数据点对应的颜色列表
colors = []
for tmax, p90, p95, p99 in zip(datos['TMAX'], datos['QUANTILE_TMAX_90'], datos['QUANTILE_TMAX_95'], datos['QUANTILE_TMAX_99']):
    if tmax > p99:
        colors.append('red')
    elif tmax > p95:
        colors.append('orange')
    elif tmax > p90:
        colors.append('yellow')
    else:
        colors.append('black')

fig = plt.figure('Gráfica', figsize=(20,15), dpi=150)
ax = fig.add_axes([0.2, 0.25, 0.60, 0.60])

# 绘制彩色数据点(非黑色)
for date, tmax, color in zip(datos['DATE'], datos['TMAX'], colors):
    if color != 'black':
        ax.plot(date, tmax, color=color, marker='o')

# 绘制相邻数据点的连线
for i in range(len(datos)-1):
    ax.plot(datos['DATE'].iloc[i:i+2], datos['TMAX'].iloc[i:i+2], color=colors[i], linewidth=1)

# 强制x轴显示所有日期刻度,确保与数据点一一对应
ax.set_xticks(datos['DATE'])
# 旋转刻度标签避免重叠
plt.xticks(rotation=90)

# 为每个x轴刻度标签设置对应颜色
for tick_label, color in zip(ax.xaxis.get_ticklabels(), colors):
    tick_label.set_color(color)

# 可选:设置日期格式,优化标签可读性
date_form = DateFormatter("%Y-%m-%d")
ax.xaxis.set_major_formatter(date_form)

plt.show()

关键说明

  • ax.set_xticks(datos['DATE']):强制x轴显示所有日期,让每个刻度对应一个数据点,解决了刻度与数据不匹配的问题
  • 直接遍历刻度标签与colors列表:此时两者数量一致,可直接一一对应设置颜色
  • 如果不需要显示全量日期刻度,可通过mdates设置自定义间隔,再通过日期匹配找到对应颜色(90天数据显示全刻度更直观)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:17:44