python – 使用Seaborn,如何从点图中获取所有元素以显示在violoinplot的元素之上?

使用Seaborn 0.6.0,我试图在小提琴图上叠加一个点图.我的问题是小提琴图的个别观察中的“棒”被绘制在点图上的标记之上,如下所示.

import seaborn as sns
import matplotlib.pyplot as plt

fig, ax = plt.subplots(1, figsize=[12,8])
sns.violinplot(x="day", y="total_bill", hue="smoker", data=tips,
               split=True, inner='stick', ax=ax, palette=['white']*2)
sns.pointplot(x="day", y='total_bill', hue="smoker",
                   data=tips, dodge=0.3, ax=ax, join=False)

python  – 使用Seaborn,如何从点图中获取所有元素以显示在violoinplot的元素之上?

仔细观察这个图,看起来绿色的误差条是在violoin棒上方(周六看),但蓝色的误差条,以及蓝色和绿色的点都画在小提琴棒的下方.

我尝试将zorder的不同组合传递给两个函数,但这并没有改善绘图外观.我能做些什么来让点图中的所有元素出现在violoinplot的所有元素之上?

解决方法:

类似于Diziet Asahi的回答,但更简单一点.由于我们正在设置zorder,因此我们不需要按照我们希望它们出现的顺序绘制绘图,这样可以省去排序艺术家的麻烦.我也正在制作它,以便点图不出现在图例中,它没有用处.

import seaborn as sns
import matploltlib.pyplot as plt

tips = sns.load_dataset("tips")

ax = sns.pointplot(x="day", y='total_bill', hue="smoker",
              data=tips, dodge=0.3, join=False, palette=['white'])
plt.setp(ax.lines, zorder=100)
plt.setp(ax.collections, zorder=100, label="")

sns.violinplot(x="day", y="total_bill", hue="smoker", data=tips,
               split=True, inner='stick', ax=ax)

python  – 使用Seaborn,如何从点图中获取所有元素以显示在violoinplot的元素之上?

上一篇:python – 在条形图中使用色调时,让seaborn显示颜色条而不是图例?


下一篇:python – Seaborn – FacetGrid轴在行/ y轴上跨列共享x轴