[英]How to create asymmetric violin plot in python using Matplotlib
我有這兩個示例數據集:
data = np.exp ( np.random.randn(N) )
data[data>threshold] = threshold + np.random.randn(sum(data>threshold))*0.2
data_1 = data
data_2 = np.random.randn(N)
我想知道如何使用 Matplotlib plt.violinplot()
創建一個不對稱的小提琴圖,其中兩個數據集都繪制在同一軸的兩側。 不幸的是,我找不到此功能的正確選項,因為它可用於statsmodels.graphics.boxplots.violinplot(side=)
或seaborn
庫。
這是我分離小提琴圖的代碼:
import numpy as np
import matplotlib.pyplot as plt
N = 10000
threshold = 5
data = np.exp ( np.random.randn(N) )
data[data>threshold] = threshold + np.random.randn(sum(data>threshold))*0.2
data_1 = data
data_2 = np.random.randn(N)
plt.figure(figsize = (15,5))
plt.subplot(1,2,1)
plt.violinplot(data_1)
plt.title('Violin Plot For Dataset 1')
plt.subplot(1,2,2)[enter image description here][1]
plt.violinplot(data_2)
plt.title('Violin Plot For Dataset 2');
結果附后。 [1]: https : //i.stack.imgur.com/hx0Ha.png
使用seaborn
,您需要在數據seaborn
轉換數據。 所述split=
參數是與被用於hue
-nesting,如果已經有一個其中僅可用於x=
參數。 因此,您需要為x
(兩個數據集的值應該相同)和hue
(根據數據集編碼)提供列:
N=100
data_1 = np.random.normal(loc=1, size=N)
data_2 = np.random.normal(loc=2, size=N)
data = pd.DataFrame({'data_1':data_1, 'data_2':data_2})
data = data.melt()
data['dummy'] = 0
sns.violinplot(data=data, y='value', split=True, hue='variable', x='dummy')
使用statsmodels.graphics.boxplots.violinplot
需要兩次調用,每個數據集調用一次
from statsmodels.graphics.boxplots import violinplot
fig, ax = plt.subplots()
violinplot([data_1], positions=[0], show_boxplot=False, side='left', ax=ax, plot_opts={'violin_fc':'C0'})
violinplot([data_2], positions=[0], show_boxplot=False, side='right', ax=ax, plot_opts={'violin_fc':'C1'})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.