LoginSignup
21
4

More than 3 years have passed since last update.

バイオリンプロットの本当の描き方を見せてやる

Last updated at Posted at 2018-07-05

「バイオリンプロット」の本当の描き方を簡単ですが以下に示します。

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import math
x = np.linspace(0, 2.0 * math.pi, 15)
y = np.sin(x)

まず以下のようにして、丸いマーカーを使ってプロットを描きます。

markers = []
markers.append(('o', [100, 0, 0, "black"]))
for m, s in markers:
    plt.scatter(x + s[1], y + s[2], marker=m, c=s[3], color=s[3], s=s[0])
plt.show()

output_2_0.png

次に、少し小さめの丸いマーカーで、少しだけ位置をずらしてプロットします。

markers.append(('o', [60, 0.1, 0.1, "black"]))
for m, s in markers:
    plt.scatter(x + s[1], y + s[2], marker=m, c=s[3], color=s[3], s=s[0])
plt.show()

output_3_0.png

次に、小さい丸を使って、位置を微調整しながらプロットします。このとき、白などの背景色を選ぶのがポイントです。

markers.append(('o', [20, 0.17, 0.03, "white"]))
for m, s in markers:
    plt.scatter(x + s[1], y + s[2], marker=m, c=s[3], color=s[3], s=s[0])
plt.show()

output_4_0.png

同じ大きさの小さい丸で、位置を微調整しながらプロットします。これで胴体のクビレができました。

markers.append(('o', [20, -0.05, 0.09, "white"]))
for m, s in markers:
    plt.scatter(x + s[1], y + s[2], marker=m, c=s[3], color=s[3], s=s[0])
plt.show()

output_5_0.png

続いて、ネックの部分を作成します。forとrangeを使って細かい丸をプロットすることで線を描きました。

for n in range(11):
    xy = n * 0.01 + 0.14
    markers.append(('o', [1, xy, xy, "black"]))
for m, s in markers:
    plt.scatter(x + s[1], y + s[2], marker=m, c=s[3], color=s[3], s=s[0])
plt.show()

output_6_0.png

最後にペグの部分をちょいちょいと足してやれば、、、

markers.append(('o', [1, 0.22, 0.20, "black"]))
markers.append(('o', [1, 0.20, 0.22, "black"]))
markers.append(('o', [1, 0.24, 0.22, "black"]))
markers.append(('o', [1, 0.22, 0.24, "black"]))
for m, s in markers:
    plt.scatter(x + s[1], y + s[2], marker=m, c=s[3], color=s[3], s=s[0])
plt.show()

output_7_0.png

バイオリンっぽくなりましたね!!

参考

21
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
4