修改matplotlib的内置颜色

时间:2014-07-17 16:19:43

标签: python graphics matplotlib

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

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

在开始考虑黑客matplotlib的来源之前有什么想法?

谢谢, JC

1 个答案:

答案 0 :(得分:1)

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

但是,如果您真的想这样做,只需修改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()

enter image description here

请注意,修改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()

enter image description here