Seaborn调色板在使用lineplot时无法正常工作

25
我在自定义折线图颜色时遇到了一些问题。我想使用连续的调色板来展示一个光谱集合。参数“palette =”蓝色“可以正常工作,但不接受任何适当的颜色列表(如”Blues_d“),这些列表不包含任何明亮的颜色。
下面是我正在使用的代码。 这是一个代表性的图表,展示了我的绘图效果
color = (sns.dark_palette("purple"))
sns.set()

ax = sns.lineplot(x="Wavelength", y="Absorption", hue="t (min)", lw=1, data=df1, palette=color, legend="brief")

问题是,我遇到了以下错误:

ValueError: 调色板列表颜色数量不正确。

所以问题是:如何使用lineplot函数并使用蓝色、红色或其他不包含任何明亮颜色的顺序调色板?
我正在使用pandas版本0.23.3、matplotlib版本2.2.2和seaborn版本0.9.0。

1
说实话,为什么它不能自己做到这一点,检查想要绘制的不同系列数量是否小于提供的颜色数量,而不是要求完全匹配呢? - ifly6
@ifly6 因为matplotlib和seaborn已经变得一团糟 :-) - BetterCallMe
4个回答

37

既然您提到了hue选项中的t (min)列,那么您需要知道该列的唯一值总数。

假设该列有5个唯一值。因此,您可以将该数字设置为sns.color_paletten_colors选项:

ax = sns.lineplot(x="Wavelength", 
                  y="Absorption", 
                  hue="t (min)", 
                  lw=1, 
                  data=df1, 
                  palette=sns.color_palette('coolwarm', n_colors=5), 
                  legend="brief")

此解决方案将无法产生预期结果。假设你的唯一 t (min) 值为 1、2 和 100。值为2的项目将获得中间色相,而不是低色相。 - maarten

5
如果您在sns.color_palette中将"as_cmap"参数设置为True,将您的颜色调色板设置为颜色映射,则无需担心颜色计数。
ax = sns.lineplot(x="Wavelength", 
                      y="Absorption", 
                      hue="t (min)", 
                      lw=1, 
                      data=df1, 
                      palette=sns.color_palette('coolwarm', as_cmap = True), 
                      legend="brief")

我认为大多数来到这个问题的人会从这个答案中受益。谢谢。 - Amit Sharma
如果您没有直接写入ax对象,那么这种方法会失败:sns.lineplot(data=out_df, x="lag", y="rse", hue="period", palette=sns.color_palette('coolwarm', as_cmap = True)) 会生成TypeError: 'LinearSegmentedColormap' object is not iterable - 上述方法可以正常工作。 - MStoner
@MStoner,我不明白你的评论。哪种“上述方法”运行良好? - PeJota
根据Hakan Özler的评论设置ncolors的方法。对于造成的混淆感到抱歉。 - MStoner

1
Palette = ["#090364", "#091e75"] #define your preference
sns.set_style("whitegrid")
sns.set_palette(Palette) #use the list defined in the function
plot = sns.countplot(df['Purchased']) #Enjoy ploting

0
你也可以用其他的方法来做,比如使用seaborn的sns.pairplot(data,hue='catagorical_variable',pallete='Set1')。因为seaborn也有它预定义的一套颜色。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接