通过matplotlib分散颜色的seaborn循环散点图

问题描述:

如何在散点图上获得seaborn颜色?通过matplotlib分散颜色的seaborn循环散点图

import matplotlib.pyplot as plt 
import seaborn as sns 
ax=fig.add_subplot(111) 
for f in files: 
    ax.scatter(args) # all datasets end up same colour 
    #plt.plot(args) # cycles through palette correctly 
+0

这是一个“功能”,而不是一个“错误”'scatter'是一个'ScalarMappable'这意味着可以分配一个标量值,这将不是被用于(与彩色地图一起),每个标记根据标量值为每个标记着色。鉴于此,具有'散布'参与颜色循环逻辑看起来很愚蠢/太过分。作为一个侧面说明,除非你改变了标记的大小,否则最好在没有行的情况下使用'plot'(它会更快)。 – tacaswell 2015-02-11 04:58:06

+0

感谢关于使用情节的提示:)我并不是说这是一个错误,只是问如何去做。 – amn41 2015-02-11 11:48:38

你必须告诉matplotlib使用哪种颜色。使用,例如,seaborn默认的调色板:

import matplotlib.pyplot as plt 
import seaborn as sns 
import itertools 
ax=fig.add_subplot(111) 

palette = itertools.cycle(sns.color_palette()) 

for f in files: 
    ax.scatter(args, color=next(palette)) 

itertools.cycle确保我们不会跑出来的颜色,并使用最后一个后再次以第一个开始。

要建立在Carsten的答案上,如果您有大量类别分配颜色,您可能希望将颜色压缩到非常大的seaborn调色板,例如xkcd_palettecrayon_palette。请注意,此练习是通常是a chartjunk anti-pattern:使用超过5-6种颜色通常是矫枉过正的,您可能需要考虑更改图表类型。

import matplotlib.pyplot as plt 
import seaborn as sns 

palette = zip(df['category'].unique(), sns.crayons.values())