Этого можно добиться с помощью нескольких вспомогательных сюжетов, которые легко настраиваются с помощью plt.subplots (см. Множество других примеров вспомогательных участков ).
Это позволяет вам отображать ваши распределения в соответствующих масштабах и не «тратить» пространство дисплея. Большинство (все?) Из функций построения Seaborn принимают аргумент ax=
, поэтому вы можете установить оси, на которых будет отображаться график. Оси также имеют четкое разделение между ними.
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
# generate some random distribution data
n = 800 # samples
prod = 95 + 5 * np.random.beta(0.6, 0.5, size=n); # a bimodal distribution
forecast = prod + 3*np.random.randn(n) # forecast is noisy estimate around the "true" production
diff = prod-forecast # should be with mu 0 sigma 3
df = pd.DataFrame(np.array([prod, forecast, diff]).T, columns=['SoundProduction','SoundForecast','diff']);
# set up two subplots, with one wider than the other
fig, ax = plt.subplots(1,2, num=1, gridspec_kw={'width_ratios':[2,1]})
# plot violin distribution estimates separately so the y-scaling makes sense in each group
sns.violinplot(data=df[['SoundProduction','SoundForecast']], ax=ax[0])
sns.violinplot(data=df[['diff']], ax=ax[1])