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

如何让Matplotlib散点图的X轴刻度颜色与散点颜色匹配?

问题:如何让X轴刻度标签与对应散点颜色一致?

散点图示例

我使用以下Python代码生成了上述散点图,尝试在plt.xticks(rotation=90, ha='right')中添加c=scatter_colors或color=scatter_colors参数时会抛出值错误,想实现X轴刻度标签的颜色与对应散点的颜色保持一致。

import numpy as np
import matplotlib.pyplot as plt

plt.figure(figsize=(20, 10))
n = 70
x = [f'{i}{val}' for i,val in enumerate(np.arange(n)[::-1])]
y = np.random.randint(50, 100, n)
scatter_colors = np.random.rand(n)

plt.scatter(x, y, c=scatter_colors)
plt.xticks(rotation=90, ha='right')
plt.show()

解决方案

plt.xticks()的color参数仅支持单一颜色值,无法直接传入数组批量设置每个刻度的颜色。需要手动获取每个刻度标签对象,逐个设置对应颜色:

  1. 绘制散点图后,获取X轴的刻度标签对象;
  2. 将scatter_colors的数值转换为matplotlib可识别的颜色(需匹配散点使用的颜色映射);
  3. 遍历刻度标签和颜色值,逐个设置颜色。

修改后的完整代码:

import numpy as np
import matplotlib.pyplot as plt

plt.figure(figsize=(20, 10))
n = 70
x = [f'{i}{val}' for i,val in enumerate(np.arange(n)[::-1])]
y = np.random.randint(50, 100, n)
scatter_colors = np.random.rand(n)

# 绘制散点图,默认使用viridis颜色映射
plt.scatter(x, y, c=scatter_colors)
plt.xticks(rotation=90, ha='right')

# 获取X轴所有刻度标签对象
xtick_labels = plt.gca().get_xticklabels()

# 遍历设置每个刻度标签的颜色
for label, color_val in zip(xtick_labels, scatter_colors):
    # 将0-1的数值转换为对应颜色映射的RGB值
    color = plt.cm.viridis(color_val)
    label.set_color(color)

plt.show()

说明

  • 如果散点使用了自定义颜色映射(比如plt.scatter(..., cmap='plasma')),只需将代码中的plt.cm.viridis替换为对应的颜色映射名称即可;
  • scatter_colors是0-1范围的数值,通过颜色映射转换为RGB/RGBA颜色值后,才能用于设置刻度标签颜色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:55:07