具有不同颜色编码和不同标记的 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-variable
和 B
y-variable
。此外,我想根据D
列着色。最后,当C='y'
标记应该是开放的(没有facecolor)时,当C='n'
标记应该是封闭的。我最初的想法是使用hue
和style
参数:
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 散点图的主要内容,如果未能解决你的问题,请参考以下文章