Seaborn 调色板 - 防止颜色回收

Posted

技术标签:

【中文标题】Seaborn 调色板 - 防止颜色回收【英文标题】:Seaborn palettes - prevent recycling of colors 【发布时间】:2014-12-05 17:41:18 【问题描述】:

Seaborn 允许定义包含多种颜色的调色板,这对于具有多条线的图表很有用。但是,将调色板设置为具有多种颜色的调色板时,仅使用前六种颜色,之后颜色会循环使用,从而难以区分线条。这可以通过显式调用调色板来覆盖,但这并不方便。当定义超过 6 个颜色时,有没有办法强制 Seaborn 当前调色板不回收颜色?

例子:

from matplotlib import pyplot as plt
import pandas as pd
import seaborn as sb

# Define a palette with 8 colors
cmap = sb.blend_palette(["firebrick", "palegreen"], 8) 
sb.palplot(cmap)

# Set the current palette to this; only 6 colors are used
sb.set_palette(cmap)
sb.palplot(sb.color_palette() )

df = pd.DataFrame(x:[x*10, x*10+5, x*10+10] for x in range(8))
fig, (ax1, ax2) = plt.subplots(2,1,figsize=(4,6))
# Using the current palette, colors repeat 
df.plot(ax=ax1) 
ax1.legend(bbox_to_anchor=(1.2, 1)) 
# using the palette that defined the current palette, colors don't repeat
df.plot(ax=ax2, color=cmap) 
ax2.legend(bbox_to_anchor=(1.2, 1))  ;

【问题讨论】:

对我来说闻起来像海生虫。 其实我不这么认为:web.stanford.edu/~mwaskom/software/seaborn/generated/… 看起来它正在做它应该做的,它只是烦人。 嗯,我仍然认为它有问题。文档说 n_colors,“调色板中的颜色数。如果大于调色板中的颜色数,它们将循环。”这意味着如果不大于调色板中的颜色,它们将不会回收,但它们仍然会回收。我将编辑问题来说明这一点。 我很确定set_palette 只是获取正在使用的调色板,而不是实例对象,因此为什么默认情况下会返回 6 项颜色循环。 你说得对,我想我现在有了——它需要在 set_palette 上显式使用 n_numbers,然后在 color_palette 上显示它。 【参考方案1】:

解决方案(感谢@tcaswell 提供的指针):使用所有颜色显式设置调色板:

# Setting the palette using defaults only finds 6 colors
sb.set_palette(cmap)
sb.palplot(sb.color_palette() )
sb.palplot(sb.color_palette(n_colors=8) )

# but setting the number of colors explicitly allows it to use them all
sb.set_palette(cmap, n_colors=8)
# Even though unless you explicitly request all the colors it only shows 6
sb.palplot(sb.color_palette() )
sb.palplot(sb.color_palette(n_colors=8) )

# In a chart, the palette now has access to all 8 
fig, ax1 = plt.subplots(1,1,figsize=(4,3)) 
df.plot(ax=ax1) 
ax1.legend(bbox_to_anchor=(1.2, 1)) ;

【讨论】:

以上是关于Seaborn 调色板 - 防止颜色回收的主要内容,如果未能解决你的问题,请参考以下文章

Seaborn的调色板(palette)

可视化库-seaborn-调色板(第五天)

Seaborn 调色板不适用于线图

seaborn使用boxplot函数进行箱图可视化(使用色彩调色板自定义设置箱图的颜色自定义颜色列表并创建为自己的调色板sns.set_palette全局设置palette参数)

seaborn使用boxplot函数进行箱图可视化(使用色彩调色板自定义设置箱图的颜色sns.set_palette全局设置palette参数自定义全局调色板色彩)

为啥 Seaborn 调色板不适用于 Pandas 条形图?