Hello,
I am seeing different behavior in seaborn.violinplot compared with seaborn.boxplot when using the same dataframe.
In my case, boxplot looks correct, but violinplot lookes swapped. I found a workaround, but I do not understand the underlying issue: the violin plot only matches the data after I explicitly change the column's type I use for groupping to str instead of the original type which was category. I included an example below.
I am using pandas 3.0.0 and seaborn 0.13.2.
I also saw issue #3893, which seems possibly related.
Thank you in advance,
Rita
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
data_pat = df_long[df_long["Pattern"] == 'MD']
data_pat = data_pat[data_pat["ROI"].isin(["Isocortex", "Cerebellum"])]
data_pat = (
data_pat
.groupby(["Subject", "ROI", "Group", "Pattern"], as_index=False)
.agg({"Value": "mean"})
)
# ---------- !! Violinplot looks wrong unless group is cast to str !! ----------
# data_pat["Group"] = data_pat["Group"].astype(str)
hue_order = ['WT', 'HTZ']
fig, axes = plt.subplots(1, 2, figsize=(10,4), sharey=True)
# ---------- LEFT: Violin ----------
ax = axes[0]
sns.violinplot(
data=data_pat,
x="ROI",
y="Value",
hue="Group",
width=0.6,
linewidth=0.3,
gap=0.25,
linecolor='grey',
saturation=0.9,
hue_order=hue_order,
ax=ax,
)
sns.stripplot(
data=data_pat,
x="ROI",
y="Value",
hue="Group",
hue_order=hue_order,
dodge=True,
jitter=False,
size=3.5,
alpha=0.5,
palette=["#bfbfbf"] * 2,
ax=ax,
)
ax.set_title("Violinplot")
# ---------- RIGHT: Boxplot -----------
ax = axes[1]
sns.boxplot(
data=data_pat,
x="ROI",
y="Value",
hue="Group",
width=0.6,
fliersize=0,
linewidth=0.3,
gap=0.25,
linecolor='grey',
saturation=0.9,
hue_order=hue_order,
ax=ax,
)
sns.stripplot(
data=data_pat,
x="ROI",
y="Value",
hue="Group",
hue_order=hue_order,
dodge=True,
jitter=False,
size=3.5,
alpha=0.5,
palette=["#bfbfbf"] * 2,
ax=ax,
)
ax.set_title("Boxplot")
Hello,
I am seeing different behavior in seaborn.violinplot compared with seaborn.boxplot when using the same dataframe.
In my case, boxplot looks correct, but violinplot lookes swapped. I found a workaround, but I do not understand the underlying issue: the violin plot only matches the data after I explicitly change the column's type I use for groupping to str instead of the original type which was category. I included an example below.
I am using pandas 3.0.0 and seaborn 0.13.2.
I also saw issue #3893, which seems possibly related.
Thank you in advance,
Rita