-1

私は質問Matplotlibを読みました:「スキャッター/ドット/ビースウォーム」プロットでのデータポイントのオーバーラップを回避し、質問Matplotlibを使用してボックスプロットに点の散布を追加する質問を読みましたが、Rで生成されたようなプロットを生成したいと思います:

R プロット
(出典: www.cbs.dtu.dk の eclund )

これらの図に使用されるコードは次のとおりです

私はmatplotlibでそれをやりたいと思っていますが、これまでのところ私はnp.random.normal(i, 0.05). ドットがバラバラですが、並べてもらいたいです。

この答えは私が望むものと似ていますが、私のデータは非常に近いが異なる浮動小数点数であるため、groupby関数は機能しません.上記のR.

4

1 に答える 1

1

この質問Matplotlibの編集で指摘されているように、「スキャッター/ドット/ビースウォーム」プロットでデータポイントの重複を回避し、最初は読みませんでした。そのようなプロット用のpythonパッケージがあります:

https://github.com/mgymrek/pybeeswarm

そして間違いなく、そのパッケージは以下のコードよりもはるかに優れた仕事をします.

浮動小数点数を受け入れるようにこの回答のコードを変更したところ、私が望んでいたものと少し似たものが得られました。コードは次のとおりです。

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 を大きくすると、ドットは中心から左右に広がるのではなく、より右に移動します...

于 2015-11-27T22:26:56.470 に答える