seaborn绘制白色箱线图叠加自定义背景时透明问题如何解决
问题原因
你不需要更换背景生成方法,问题本质是matplotlib的图层层级逻辑:不同绘图元素有默认的zorder(层叠顺序)数值,数值越高越靠上层显示,axvspan生成的背景色块默认zorder高于箱线图的箱体,所以即使先绘制背景、后绘制箱线图,背景还是会盖住白色箱体,出现透明的视觉效果。
解决方法
只要手动指定zorder参数调整层级即可,修改后代码如下:
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) # 给背景色块指定zorder=0,固定在最底层 ax.axvspan(-0.5, 0.5, facecolor='#FFFFCC', alpha=0.3, zorder=0) ax.axvspan(0.5, 1.5, facecolor='#FFE600', alpha=0.3, zorder=0) ax.axvspan(1.5, 2.5, facecolor='#999900', alpha=0.3, zorder=0) g1 = sns.boxplot(x="Group", y="ORIG – MTP 405nm average", hue="Type", fliersize=0, width=0.5, medianprops=dict(color="red", alpha=1), # 给箱体指定zorder=2,确保显示在背景上方,移除重复的palette参数避免冲突 boxprops=dict(linewidth=1, facecolor='w', edgecolor='k', alpha=1, zorder=2), 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也同步设置为2,避免部分线条被背景遮挡。
内容的提问来源于stack exchange,提问作者Stefano_g
相关产品推荐
相关产品推荐

