2014-07-17 51 views
1

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

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

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

感谢, JC

+1

为什么不直接使用自定义的'color_cycle'? (你可以根据每个坐标轴或matplotlib rc来定义它。)将青色变成“粉色”似乎是一种非常奇怪的方式... –

回答

1

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

但是,如果你真的想这样做,只需修改matplotlib.colors.colorConverter.colors而不是matplotlib.colors.ColorConverter.colors

colorConverter是matplotlib使用后台将颜色规范转换为rgb的单例(以及仅限于惯例)ColorConverter的实例。

例如:

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

+0

非常感谢你的回答。它看起来绝对是我想要的。只要我保持合理(即不改变'k'或将普通蓝色修改为蓝色变体),我必须问问为什么这是一个非常糟糕的主意。 – jchristophe

+0

@jchristophe - 如果你只是为自己的代码库做的话,它一点也不差。如果有其他人出现并单独查看代码,则更是如此。他们会对为什么“r”没有产生通常的明亮的红色等感到困惑。与其他任何东西一样,在合理和有限的范围内使用,根本不是一个坏主意。这只是一个意想不到的行为的简单途径(又称“滥用”)。通过“我认为这是一个坏主意”,我主要是指“我认为明确指定颜色会更好”(而不是改变缩写的含义)。 –