seaborn 使用 matplotlib scatter 循环显示颜色

seaborn cycle through colours with matplotlib scatter

如何在绘制散点图时获得 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

你必须告诉 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 确保我们不会 运行 颜色不对,并在使用最后一个后再次从第一个开始。

更新:

根据@Iceflower 的评论,通过

创建自定义调色板
palette = sns.color_palette(None, len(files))

可能是更好的解决方案。不同之处在于,我在顶部的原始答案会尽可能频繁地遍历默认颜色,而此解决方案创建的调色板具有与文件一样多的色调。这意味着没有颜色重复,但颜色之间的差异可能非常细微。

以 Carsten 的回答为基础,如果您有大量类别要分配颜色,您可能希望将颜色压缩到一个非常大的 seaborn 调色板中,例如 xkcd_palette or crayon_palette.. Note that this practice is usually a chartjunk anti-pattern:使用超过5-6 种颜色通常有点矫枉过正,您可能需要考虑更改图表类型。

import matplotlib.pyplot as plt
import seaborn as sns

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