2014-07-17 47 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」沒有產生通常的明亮的紅色等感到困惑。與其他任何東西一樣,在合理和有限的範圍內使用,根本不是一個壞主意。這只是一個意想不到的行爲的簡單途徑(又稱「濫用」)。通過「我認爲這是一個壞主意」,我主要是指「我認爲明確指定顏色會更好」(而不是改變縮寫的含義)。 –