2015-05-07 36 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()