当使用matplotlib
绘制点图时,我想偏移重叠的数据点以保持它们都可见。例如,如果我有:
CategoryA: 0,0,3,0,5
CategoryB: 5,10,5,5,10
字符串
我希望每个CategoryA
“0”数据点都并排设置,而不是彼此重叠,同时仍然与CategoryB
不同。
在R(ggplot2
)中有一个"jitter"
选项可以实现这一点。matplotlib中是否有类似的选项,或者是否有其他方法可以导致类似的结果?
- 编辑:* 澄清一下,the
"beeswarm"
plot in R本质上是我所考虑的,pybeeswarm
是matplotlib/Python版本的早期但有用的起点。 - 编辑:* 补充说,Seaborn的Swarmplot,在0.7版中引入,是我想要的一个很好的实现。
7条答案
按热度按时间pxy2qtax1#
通过@user2467675扩展答案,以下是我是如何做到的:
字符串
stdev
变量确保抖动足以在不同尺度上看到,但它假设轴的极限为零和最大值。然后可以调用
jitter
而不是scatter
。eqfvzcg82#
Seaborn通过
sns.swarmplot()
提供类似直方图的分类点图,并通过sns.stripplot()
提供抖动分类点图:字符串
的数据
型
的
2q5ifsrm3#
我使用numpy.random将数据沿X轴沿着但围绕每个类别的固定点进行“分散/预热”,然后基本上为每个类别执行pyplot.scatter():
字符串
x1c 0d1x的数据
fjnneemd4#
解决这个问题的一种方法是将散点图/点图/蜂群图中的每一行都视为直方图中的一个bin:
字符串
这显然涉及到数据的装箱,所以你可能会失去一些精度。如果你有离散数据,你可以替换:
型
使用:
型
即使对于连续数据,也可以保留精确的y坐标的另一种方法是使用kernel density estimate来缩放x轴上随机抖动的幅度:
型
第二种方法是基于violin plots的工作原理,它仍然不能保证没有一个点是重叠的,但我发现,在实践中,只要有一个适当的点(>20),它往往会给出给予相当好看的结果,并且分布可以合理地近似为高斯和。
x1c 0d1x的数据
ymzxtsji5#
不知道一个直接的mpl替代品在这里你有一个非常基本的建议:
字符串
的数据
ws51t4hk6#
Seaborn的swarmplot似乎最适合您的想法,但您也可以使用Seaborn的regplot:
字符串
e5nszbig7#
通过@wordsforthewise扩展答案(对不起,不能以我的声誉评论),如果你需要抖动和使用色调来按某些分类(像我一样)对点进行着色,Seaborn的lmplot是一个很好的选择,而不是reglpot:
字符串