2015-05-07 64 views
7

黑暗,逆轉調色板我創建一個包含使用順序調色板像這樣幾個地塊的人物:創建於Seaborn

import matplotlib.pyplot as plt 
import seaborn as sns 
import math 

figure = plt.figure(1) 
x = range(1, 200) 
n_plots = 10 

with sns.color_palette('Blues_d', n_colors=n_plots): 
    for offset in range(n_plots): 
     plt.plot(x, [offset + math.sin(float(i)/10) for i in range(len(x))]) 

figure.show() 

不過,我想扭轉調色板。 The tutorial指出我可以將'_r'添加到調色板名稱中以反轉它,並且'_d'使其變爲「黑色」。但我似乎沒有能夠一起做到這些:'_r_d','_d_r','_rd''_dr'都產生錯誤。我如何創建一個黑暗的,顛倒的調色板?

+2

調色板只是列表,因此您可以始終使用'reversed()'函數。 – mwaskom

回答

5

我回答我自己的問題,以發佈我使用的解決方案的細節和解釋,因爲mwaskom的建議需要調整。使用

拋出AttributeError: __exit__,我認爲,由於with語句需要與__enter____exit__方法,其中reversed迭代器不符合的對象。如果我使用sns.set_palette(reversed(palette))而不是with語句,即使遵循配色方案,圖中的顏色數量也會被忽略(默認值爲6,我不知道爲什麼)。爲了解決這個問題,我使用list.reverse()方法:

figure = plt.figure(1) 
x = range(1, 200) 
n_plots = 10 
palette = sns.color_palette("Blues_d", n_colors=n_plots) 
palette.reverse() 

with palette: 
    for offset in range(n_plots): 
     plt.plot(x, [offset + math.sin(float(i)/10) for i in range(len(x))]) 

figure.show() 

編輯:discoveredn_colors參數在調用set_palette被忽略的原因是因爲n_colors參數也必須在調用中指定。因此,另一種解決方案是:

figure = plt.figure(1) 
x = range(1, 200) 
n_plots = 10 

sns.set_palette(reversed(sns.color_palette("Blues_d", n_plots)), n_plots) 

for offset in range(n_plots): 
    plt.plot(x, [offset + math.sin(float(i)/10) for i in range(len(x))]) 

figure.show()