问题描述
Seaborn允许定义包含多种颜色的调色板,这对于具有多行的图表很有用.但是,将调色板设置为具有多种颜色的调色板时,仅使用前六种,之后颜色会循环使用,从而很难区分线条.可以通过显式调用调色板来覆盖它,但这并不方便.当定义了6种以上时,是否有办法强制Seaborn当前调色板不回收颜色?
Seaborn allows defining color palettes that contain multiple colors, useful for charts with many lines. However, when setting the palette to one with multiple colors, only the first six are used, after which colors recycle, making it hard to distinguish lines. This can be overridden by explicitly calling the palette, but that's not convenient. Is there a way to force the Seaborn current palette not to recycle colors, when more than 6 are defined?
示例:
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)) ;
推荐答案
解决方案(感谢@tcaswell的指针):使用所有颜色显式设置调色板:
Solution (thanks to @tcaswell for the pointer): Set the palette explicitly using all colors:
# 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调色板-防止颜色回收的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!