修改matplotlib内置颜色

2 投票
1 回答
775 浏览
提问于 2025-04-18 13:44

我想要修改matplotlib的默认颜色,但不想创建新的颜色循环或调色板。主要原因是我想重新绘制已经做好的图表,而不想去找那些字符串,比如'b'、'r'等等,想要用更现代的颜色,比如金属蓝等。

我发现这些内置颜色的RGB代码似乎是在matplotlib.colors.ColorConverter.colors里定义的,但修改这个字典对我没有帮助。创建一个新的颜色循环也无法让我在旧的ipython笔记本中使用。

在我考虑去修改matplotlib的源代码之前,有没有什么好的建议?

谢谢,
JC

1 个回答

2

出于很多原因,我觉得这样做不好...

不过,如果你真的想这么做,可以修改 matplotlib.colors.colorConverter.colors,而不是 matplotlib.colors.ColorConverter.colors

colorConverter 是一个单例(其实只是个约定)实例,matplotlib 在后台使用它来把颜色的描述转换成 rgb 格式。

举个例子:

import matplotlib.pyplot as plt
import matplotlib.colors as colors

# Evil!!
colors.colorConverter.colors['b'] = (0.1, 1.0, 0.2)
# You may need to clear the cache that ColorConverter keeps if 'b'
# has alreadly been used...
colors.colorConverter.cache = {}

plt.plot(range(10), color='b')
plt.show()

在这里输入图片描述

要注意,修改 colorConverter.colors 只会改变单个字母的颜色缩写的效果!使用 "blue" 还是会得到蓝色。

如果你真的想搞点花样,就需要修改 colorConverter.to_rgb 了:

import matplotlib.pyplot as plt
import matplotlib.colors as colors
import numpy as np

# Evil!!
colors.colorConverter.to_rgb = lambda x: tuple(np.random.random(3))

plt.plot(range(10), color='pink')
plt.show()

在这里输入图片描述

撰写回答