Python Matplotlib:非随机抖动

Python Matplotlib:非随机抖动,python,r,matplotlib,scatter-plot,jitter,Python,R,Matplotlib,Scatter Plot,Jitter,我已经阅读了问题,但是我想生成类似于用R生成的图: (来源:) 是用于这些数字的代码 我想用matplotlib来做,但到目前为止,我只使用了np.random.normal(I,0.05)。这些点彼此分开,但我想把它们整理一下 与我想要的类似,但我的数据是非常接近但不同的浮点数,因此groupby函数不起作用,我想让点与中心对称,如上面用R生成的图所示。正如在这个问题的编辑中指出的,我一开始没有读到,有一个python包用于这种图: 显然,这个包比下面的代码做得更好 我修改了的代码来接受浮

我已经阅读了问题,但是我想生成类似于用R生成的图:


(来源:)

是用于这些数字的代码

我想用matplotlib来做,但到目前为止,我只使用了
np.random.normal(I,0.05)
。这些点彼此分开,但我想把它们整理一下


与我想要的类似,但我的数据是非常接近但不同的浮点数,因此
groupby
函数不起作用,我想让点与中心对称,如上面用R生成的图所示。

正如在这个问题的编辑中指出的,我一开始没有读到,有一个python包用于这种图:

显然,这个包比下面的代码做得更好

我修改了的代码来接受浮点数,得到了一些与我想要的稍微相似的东西。代码如下:

CA = [0,4,0,3,0,5]  
CB = [0,0,4,4,2,2,2,2,3,0,5] 
CC = [0.08423, 4.0078, 0.02936, 0.04862, 3.2105, 3.7796, 1.9974, 1.6986, 1.7443, 1.6615, 1, 1, 1]

lists = [CA, CB, CC]

x = []
y = []
for index1, my_list in enumerate(lists):
    scores_bins = {}
    for index2, score in enumerate(my_list):
        binx = round(score, 1)
        if binx not in scores_bins:
            scores_bins[binx] = []
        scores_bins[binx].append(score)

    for key, val in sorted(scores_bins.items()):
        values = scores_bins[key]
        points = len(values)
        pos = 1 + index1 + (1 - points) / 50.
        for value in values:
            x.append(pos)
            y.append(value)
            pos += 0.05

plt.plot(x, y, 'o')
plt.xlim((0,4))
plt.ylim((-1,6))

plt.show()
但是,如果pos增加,点会向右移动更多,而不是从中心向左右扩散