В настоящее время Seaborn предлагает функциональность для разделения скрипичных участков , установив split=True
в соответствии с переменной hue
.Я хотел бы сделать «половинный» сюжет скрипки, то есть сюжет, где половина каждой скрипки опущена.На таком графике изображено что-то похожее на pdf для каждой непрерывной переменной, нанесенное только на одной стороне каждой вертикальной линии каждой категориальной переменной.
Мне удалось обмануть seaborn
, чтобы построить это с помощью дополнительной точки данных за пределами нанесенного диапазона значений и дополнительного фиктивного оттенка, но я хотел бы знать, можно ли это сделать без фактического изменения набора данныхнапример, в пределах sns.violinplot()
аргументов.
Например, этот график:
![enter image description here](https://i.stack.imgur.com/2MHhy.png)
Был создан из этого фрагмента:
# imports
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# load dataset from seaborn
datalist = sns.get_dataset_names()
dataset_name = 'iris'
if dataset_name in datalist:
df = sns.load_dataset(dataset_name)
else:
print("Dataset with name: " + dataset_name + " was not found in the available datasets online by seaborn.")
# prepare data
df2 = df.append([-999,-999,-999,-999,'setosa'])
df2['huecol'] = 0.0
df2['huecol'].iloc[-1]= -999
# plot
fig = plt.figure(figsize=(6,6))
sns.violinplot(x='species',y="sepal_width",
split=True, hue ='huecol', inner = 'quartile',
palette="pastel", data=df2, legend=False)
plt.title('iris')
# remove hue legend
leg = plt.gca().legend()
leg.remove()
plt.ylim([1,5.0])
plt.show()