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

Matplotlib中为单个刻度线指定自定义颜色的实现问题

问题原因与解决方法

你的代码失效主要有两个原因:

  1. ax1.get_xticklines()会返回每个刻度的上下两条线(比如x=0对应顶部、底部各一条刻度线),实际返回的列表长度是12,而你的colors只有6个元素,zip后只会给前6条线分配颜色,剩下的6条还是默认色;而且这种配对方式会把同一个刻度的两条线分配成不同颜色,完全不符合需求。
  2. 直接修改tick._color是操作matplotlib的内部私有属性,这种方式不被官方推荐,还可能因版本更新失效,应该用公开的set_color()方法。

正确实现代码

import numpy as np
import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4, 5]
y = np.sin(x)
y2 = np.tan(x)

fig = plt.figure()
ax1 = fig.add_subplot(2, 1, 1)
ax1.plot(x, y)
ax2 = fig.add_subplot(2, 1, 2)
ax2.plot(x, y2)

colors = ['b', 'g', 'r', 'c', 'm', 'y']
ax1.set_xticks(x)

# 获取所有x轴刻度线,每两个为一组(对应一个刻度的上下线)
tick_lines = ax1.get_xticklines()
for i in range(len(colors)):
    # 给同一个刻度的两条线设置相同颜色
    tick_lines[2*i].set_color(colors[i])
    tick_lines[2*i + 1].set_color(colors[i])

plt.show()

简化版(仅修改底部刻度线)

如果顶部刻度线默认隐藏,只需要修改底部的刻度线,可以直接取底部的线列表和colors配对:

import numpy as np
import matplotlib.pyplot as plt

x = [0, 1, 2, 3, 4, 5]
y = np.sin(x)
y2 = np.tan(x)

fig = plt.figure()
ax1 = fig.add_subplot(2, 1, 1)
ax1.plot(x, y)
ax2 = fig.add_subplot(2, 1, 2)
ax2.plot(x, y2)

colors = ['b', 'g', 'r', 'c', 'm', 'y']
ax1.set_xticks(x)

# 只获取底部的刻度线(索引从1开始,步长为2)
bottom_ticks = ax1.get_xticklines()[1::2]
for tick, color in zip(bottom_ticks, colors):
    tick.set_color(color)

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 07:25:54