我想修改matplotlib的默认颜色而不创建新的自定义color_cycle或调色板。我的主要原因是我想重新绘制已经制作的图形,而不必追逐所有的字符串“ b”,“ r”,……来获得更现代的颜色,例如金属蓝等。
我发现这些内置颜色的RGB代码似乎是在matplotlib.colors.ColorConverter.colors
中定义的,但是修改此字典对我没有帮助。创建新的color_cycle对我的旧ipython笔记本中的图形没有帮助。
在开始考虑黑客matplotlib的源代码之前有任何想法吗?
谢谢,
杰西
最佳答案
由于很多原因,我认为这是一个坏主意。
但是,如果您确实要这样做,只需修改matplotlib.colors.colorConverter.colors
而不是matplotlib.colors.ColorConverter.colors
。colorConverter
是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()