seaborn 中的白盒图? (覆盖层不透明)

White box plot in seaborn? (not transparent on overlay)

我想在 seaborn 中创建一个具有自定义背景颜色的绘图,并在其顶部绘制一些白色箱线图。相反,当它们设置为白色时,它们基本上是透明的。

这是我的代码:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas

with open('Data_Figure.csv', 'r') as handle:
    data_plot = pandas.read_csv(handle, sep='\t')

fig, ax = plt.subplots(figsize=(4,6), dpi=600)

ax.axvspan(-0.5, 0.5, facecolor='#FFFFCC', alpha=0.3)
ax.axvspan(0.5, 1.5, facecolor='#FFE600', alpha=0.3)
ax.axvspan(1.5, 2.5, facecolor='#999900', alpha=0.3)

g1 = sns.boxplot(x="Group", y="ORIG – MTP 405nm average", hue="Type", palette = ['w'],
                 fliersize=0, width=0.5, medianprops=dict(color="red", alpha=1), boxprops=dict(linewidth=1, facecolor='w', edgecolor='k', alpha=1), 
                 whiskerprops=dict(linewidth=0.75, color='k', alpha=1), capprops=dict(linewidth=0.5, color='k', alpha=1),
                 data=data_plot, ax=ax)
plt.legend()

相反,我得到以下信息。以盒子内部为背景。也许我应该使用不同的方法来创建背景?或者层的顺序应该有规范?

盒子有 zorder 0 而黄色背景补丁有 zorder 1,因此将绘制在 盒子上。

您可以指定补丁的 zorder,例如将其设置为 -1:

ax.axvspan(-0.5, 0.5, facecolor='#FFFFCC', alpha=0.3, zorder=-1)
ax.axvspan(0.5, 1.5, facecolor='#FFE600', alpha=0.3, zorder=-1)
ax.axvspan(1.5, 2.5, facecolor='#999900', alpha=0.3, zorder=-1)