具有不同颜色编码和不同标记的 Sns 散点图

Posted

技术标签:

【中文标题】具有不同颜色编码和不同标记的 Sns 散点图【英文标题】:Sns Scatter plot with differet color coding and different markers 【发布时间】:2021-09-19 13:45:42 【问题描述】:

我想创建一个Seaborn 散点图,使用以下数据框:

df = pd.DataFrame('A':[1,2,3,4],'B':[2,4,6,8],'C':['y','y','n','n'],'D':[1,1,2,2])

在我的图表中,A 应该是 x-variableB y-variable。此外,我想根据D 列着色。最后,当C='y' 标记应该是开放的(没有facecolor)时,当C='n' 标记应该是封闭的。我最初的想法是使用huestyle参数:

sns.scatterplot(x='A', y='B',
                        data=df, hue='D',style ='C')

但是,我没有设法获得我正在寻找的图表。有人可以帮我解决这个问题吗?提前谢谢你。

【问题讨论】:

我不完全确定我理解您的问题。如果只是您的标记看起来不像您想要的那样,请使用 markers 关键字来定义它们 你不能在 seaborn 中混合填充和线条艺术创作者,这是由于may makes points invisible 的渲染方式。您可以提供字典以将style 映射到matplotlib marker:markers="y": "s", "n": "o"。但是两个标记都应该被填充或线条艺术。另一种方法是自己使用ax.scatter,但这样你就失去了seaborn的功能。 【参考方案1】:

尚不能为 matplotlib 指定整个标记样式(因此在您的情况下为 'marker''fillstyle' 键)。看看this post的答案。

所以剩下的唯一事情就是立即使用不同的标记并指定它们(如列表或字典)

sns.scatterplot(data=df, x='A', y='B', hue='D', style='C', markers=['o', 's'])
plt.show()

显然,正如this post 解释的那样,在 seaborn 中甚至很难创建非填充标记。唯一的选择是做一些 matplotlib-seaborn-hybrid 的事情......所以如果你接受在同一个轴上绘制两次(一个用于填充标记,一个用于未填充标记),你仍然需要深入研究seaborn的怪癖......

【讨论】:

以上是关于具有不同颜色编码和不同标记的 Sns 散点图的主要内容,如果未能解决你的问题,请参考以下文章

可视化实验十:利用Python绘制棒图散点图

可视化实验十:利用Python绘制棒图散点图

我们如何根据颜色标记散点图的图例

具有不同类别的 Libreoffice 散点图

echarts学习 散点图 地图 雷达图 仪表盘

尝试创建一个散点图,其中循环标记和颜色,以便在标记的 1 个循环完成后更改颜色