Seaborn scatterplot set hollow markers instead of filled markers(Seborn散点图设置中空标记而不是填充标记)
问题描述
使用Seborn散点图,如何将标记设置为中空圆圈而不是实心圆圈?
这里有一个简单的例子:
import pandas as pd
import seaborn as sns
df = pd.DataFrame(
{'x': [3,2,5,1,1,0],
'y': [1,1,2,3,0,2],
'cat': ['a','a','a','b','b','b']}
)
sns.scatterplot(data=df, x='x', y='y', hue='cat')
我尝试了以下几种方法,但都没有成功;其中大多数不会抛出错误,而是生成与上面相同的情节。我认为这些都不起作用,因为颜色是用hue参数设置的,但我不确定修复方法是什么。
sns.scatterplot(data=df, x='x', y='y', hue='cat', facecolors = 'none')sns.scatterplot(data=df, x='x', y='y', hue='cat', facecolors = None)sns.scatterplot(data=df, x='x', y='y', hue='cat', markerfacecolor = 'none')sns.scatterplot(data=df, x='x', y='y', hue='cat', markerfacecolor = None)
with sns.plotting_context(rc={"markerfacecolor": None}):
sns.scatterplot(data=df, x='x', y='y', hue='cat')
推荐答案
原则上您应该能够使用fillstyle="none"创建圆形标记,但有一些deep complications,它当前的工作方式并不像您希望的那样。
最简单的纯海运解决方案是利用您可以使用任意乳胶符号作为标记这一事实:
sns.scatterplot(data=df, x='x', y='y', hue="cat", marker="$circ$", ec="face", s=100)
这在某种程度上是有限的,因为您无法控制圆的厚度。
混合海运-matplotlib方法更灵活,但也更繁琐(您需要自己创建图例):
palette = {"a": "C0", "b": "C1"}
kws = {"s": 70, "facecolor": "none", "linewidth": 1.5}
ax = sns.scatterplot(
data=df, x='x', y='y',
edgecolor=df["cat"].map(palette),
**kws,
)
handles, labels = zip(*[
(plt.scatter([], [], ec=color, **kws), key) for key, color in palette.items()
])
ax.legend(handles, labels, title="cat")
第三个选项是使用FacetGrid。这就不那么灵活了,因为情节将不得不以自己的形象出现。但它相当简单;另一个答案使用FacetGrid,但它有点过度设计,因为它忘记了hue_kws参数:
palette = ["C0", "C1"]
g = sns.FacetGrid(
data=df, hue="cat",
height=4, aspect=1.25,
hue_kws={"edgecolor": palette},
)
g.map(plt.scatter, "x", "y", facecolor="none", lw=1.5)
g.add_legend()
这篇关于Seborn散点图设置中空标记而不是填充标记的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Seborn散点图设置中空标记而不是填充标记
基础教程推荐
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
