python - Matplotlib:避免 "scatter/dot/beeswarm"图中的重叠数据点

标签 python matplotlib charts seaborn swarmplot

当使用 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 版本中引入,是我想要的一个很好的实现。

最佳答案

通过@user2467675 扩展答案,我是这样做的:

def rand_jitter(arr):
    stdev = .01 * (max(arr) - min(arr))
    return arr + np.random.randn(len(arr)) * stdev

def jitter(x, y, s=20, c='b', marker='o', cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, hold=None, **kwargs):
    return scatter(rand_jitter(x), rand_jitter(y), s=s, c=c, marker=marker, cmap=cmap, norm=norm, vmin=vmin, vmax=vmax, alpha=alpha, linewidths=linewidths, **kwargs)

stdev 变量确保抖动足以在不同的尺度上看到,但它假定轴的限制为零和最大值。

然后您可以调用 jitter 而不是 scatter

关于python - Matplotlib:避免 "scatter/dot/beeswarm"图中的重叠数据点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8671808/

相关文章:

python - 获取 Pandas 行中最大值的列索引

python - PyQT 和 Visual Studio 2010

python - 在python中创建一个MySQL数据库

python - 如何绘制四个具有不同 colspans 的子图?

python - 如何更改 matplotlib(python)中的字体?

python - 即使我已经成功安装,我也无法在 Python 3.9.4 中导入 gdal

python - Matplotlib 条形图 X 轴标签顺序

javascript - Recharts 在 React 中不起作用 - 'recharts' 不包含名为 'Recharts' 的导出

javascript - 我只需要构建一个像这样的散点图?我尝试过使用 Google 图表,但找不到合适的图表

javascript - 在 Highcharts 中以编程方式更改面积图的颜色