Форма участка скрипки полезна для визуализации распределения данных сгруппированных данных.Размер каждой группы также можно визуализировать как область «скрипки».
Но если данные неоднородны, width
определенной группы слишком мал, чтобы показать какую-либо значимую информацию (группа Пт вРисунок 1).Для увеличения размера сюжета в морской скрипке есть опция width
.
Однако, как только группа малого размера будет увеличена до подходящего масштаба, большие станут «слишком большими» (группа Sat inРисунок 2) и накладываются друг на друга.
Таким образом, мой вопрос , как назначить различную зияющую дистанцию для скрипки в морском заливе.
Демонстрация
Код для генерации рисунка 1:
import seaborn as sns
tips = sns.load_dataset("tips")
ax = sns.violinplot(x="day", y="total_bill", hue="sex",
data=tips, palette="Set2", split=True,
scale="count", inner="stick",
scale_hue=False, bw=.2)
Рисунок 1
Код для генерации рисунка 2:
import seaborn as sns
tips = sns.load_dataset("tips")
ax = sns.violinplot(x="day", y="total_bill", hue="sex",
data=tips, palette="Set2", split=True,
scale="count", inner="stick", width=2.5
scale_hue=False, bw=.2)
Рисунок 2
Каково ваше решение?
Первая попытка - увеличить ширину фигуры, но она выглядит ужасно и оставляет слишком много пустого пространства на фигуре.
Я пытался отобразить данные категории по оси x в числовую форму с разным расстоянием между ними.
tips["day_n"] = tips["day"].map(dict(zip(tips["day"].unique(), [1, 2, 4, 6])))
Но кажется, что seaborn не поддерживает числовые данные, расстояние между группами остается неизменным или портится при переключении оси x, y.
Код для генерации рисунка 3:
ax = sns.violinplot(y="day_n", x="total_bill", hue="sex",
data=tips, palette="Set2", split=True,
scale="count", inner="stick", width=2.5,
scale_hue=False, bw=.2)
Рисунок 3
- Аналогичный вопрос в stackoverflow, указывая, что есть опция
positions
для matplotlib.Но это не работает и для морского рожка.