我想修改matplotlib的默认颜色而不创建新的自定义color_cycle或调色板。我的主要原因是我想重新绘制已经制作的图形,而不必追逐所有的字符串“ b”,“ r”,……来获得更现代的颜色,例如金属蓝等。

我发现这些内置颜色的RGB代码似乎是在matplotlib.colors.ColorConverter.colors中定义的,但是修改此字典对我没有帮助。创建新的color_cycle对我的旧ipython笔记本中的图形没有帮助。

在开始考虑黑客matplotlib的源代码之前有任何想法吗?

谢谢,
杰西

最佳答案

由于很多原因,我认为这是一个坏主意。

但是,如果您确实要这样做,只需修改matplotlib.colors.colorConverter.colors而不是matplotlib.colors.ColorConverter.colors

colorConverterColorConverter的单例(很好,仅按惯例),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()

10-05 22:54