Мой вариант использования очень похож в документацию, за исключением того, что я хотел бы наложить пользовательские прямоугольные графики сверху (как в этом уроке)
Однако у меня возникла странная проблема с выравниванием графиков скрипки относительно оси X, и я не понимаю, что я я делаю иначе, чем в документации...
Вот код для MRE только с разделенными скрипками:
Код: Выделить всё
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
sns.set_theme()
data1 = np.random.normal(0, 1, 1000)
data2 = np.random.normal(1, 2, 1000)
data = pd.concat(
[
pd.DataFrame({"column": "1", "data1": data1, "data2": data2}),
pd.DataFrame({"column": "2", "data3": data2, "data4": data1}),
],
axis="rows",
)
def mkplot():
fig, violin_ax = plt.subplots()
sns.violinplot(
data=data.melt(id_vars="column"),
y="value",
split=True,
hue="variable",
x="column",
ax=violin_ax,
palette="Paired",
bw_method="silverman",
inner=None,
)
plt.show()
mkplot()
скрипки с неправильным выравниванием
(это также верно когда «столбец» имеет числовой тип, а не str)
Кажется, что коробчатые диаграммы также смещены, но не с той же величиной; вы можете использовать функцию ниже с теми же данными
Код: Выделить всё
def mkplot2():
fig, violin_ax = plt.subplots()
sns.violinplot(
data=data.melt(id_vars="column"),
y="value",
split=True,
hue="variable",
x="column",
ax=violin_ax,
palette="Paired",
bw_method="silverman",
inner=None,
)
sns.boxplot(
data=data.melt(id_vars="column"),
y="value",
hue="variable",
x="column",
ax=violin_ax,
palette="Paired",
width=0.3,
flierprops={"marker": "o", "markersize": 3},
legend=False,
dodge=True,
)
plt.show()
mkplot2()
Как это решить?
Подробнее здесь: https://stackoverflow.com/questions/793 ... th-seaborn
Мобильная версия