LoginSignup
0
0

seabornでboxplotのboxなし(線だけ)とswarmplotを重ねる

Posted at

設定を忘れるので、メモ。
このようなグラフが描けます。boxplotのboxなし・whiskerなしとswarmplotを重ねます。
dummy.png

ダミーデータの生成

自分のデータを持っている人はスキップしてください。

Python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 2種類のダミーデータを生成
np.random.seed(seed=0)
a = np.random.normal(10, 5, 10) #平均、標準偏差、個数
b = np.random.normal(20, 10, 10)

# seabornでboxplotを描きやすいようにくっつける
df_a = pd.DataFrame([a, ["a"]*len(a)]).T
df_a.columns = ["data", "category"]
df_b = pd.DataFrame([b, ["b"]*len(a)]).T
df_b.columns = ["data", "category"]

df_melt = pd.concat([df_a, df_b], axis=0).reset_index(drop=True)

このようなデータです。
スクリーンショット 2023-09-25 22.36.06.png

boxplotのboxなしとswarmplotを重ねる

Python
sns.set_style('darkgrid')

fig, ax =plt.subplots(figsize = [4, 6])

sns.boxplot(x="category", y="data", data=df_melt, showfliers=False, showbox=False, whiskerprops=dict(linewidth=0), linewidth=2, ax=ax)
sns.swarmplot(x="category", y="data", data=df_melt, ax=ax, color="black", size=10, alpha=0.5)

plt.setp(ax.lines, color="gray") #横線の色
ax.set_xlabel("", size = 24)
ax.set_ylabel("Dummy data [a.u.]", size = 24)
ax.set_xticks([0, 1], ["a", "b"], size = 18) #字を大きくするためにset
ax.set_yticks([0, 10, 20, 30, 40], [0, 10, 20, 30, 40], size = 18) #字を大きくするためにset

plt.savefig("dummy.png", dpi=100, bbox_inches="tight")

実際に使う時はdpiは200にしていますが、Qiitaにアップしようとしたら大きすぎたので100に設定。

参考

0
0
0

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
0
0