Seaborn 调色板不适用于线图
Posted
技术标签:
【中文标题】Seaborn 调色板不适用于线图【英文标题】:Seaborn Color Palette not working appropiate with lineplot 【发布时间】:2019-01-16 16:16:32 【问题描述】:我在为线条图自定义颜色时遇到了一点麻烦。我想用顺序调色板显示一组光谱。参数“palette="blues" 工作正常,但不接受任何适当的颜色列表(如“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 版
【问题讨论】:
老实说,为什么它不能自己做到这一点,检查不同系列想要情节的数量少于提供的颜色数量,而不是完全匹配 @ifly6 '因为 matplotlib 和 seaborn 已经变得一团糟 :-) 【参考方案1】:由于您在hue
选项中提到了t (min)
列,因此您需要知道该列的唯一值总数。
假设列中有 5 个唯一值。因此,您可以将数字设置为sns.color_palette
的n_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")
【讨论】:
【参考方案2】:如果您通过在 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")
【讨论】:
我认为大多数人来这个问题都会得到这个答案的帮助。谢谢。 如果您不直接写入 ax 对象,此方法将失败:sns.lineplot(data=out_df, x="lag", y="rse", hue="period", palette=sns.color_palette('coolwarm', as_cmap = True))
生成 TypeError: 'LinearSegmentedColormap' 对象不可迭代 - 上述方法工作正常
@MStoner 我不明白你的评论。哪种“上述方法”效果很好?
按照 Hakan Özler 的评论设置 ncolors 的方法。很抱歉造成混乱【参考方案3】:
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
【讨论】:
以上是关于Seaborn 调色板不适用于线图的主要内容,如果未能解决你的问题,请参考以下文章