plt和sns画图时,出现两个子图,如何删除第二个空白子图,并保存sns画的图
fig, ax = plt.subplots(ncols=1, nrows=1, figsize=(10,6))
sns.factorplot(kind='box', x="Model", y="auc",data = model_prems_df, showfliers=True,showcaps=True, linewidth=1.5,dodge=False,
aspect=2,width=.6,height=8,
boxprops = {"color":"#000000","facecolor":"#f0fff0"}, # 设置箱体属性,填充色and 边框色
flierprops = {"marker":"o","markerfacecolor":"white","color":"black"}, # 设置异常值属性,点的形状、填充色和边框色
medianprops = {"linestyle":"-","color":"#000000",'linewidth': 3}, # 设置中位数线的属性,线的类型和颜色
whiskerprops = {'color': "#000000","linestyle":"--"}, #设置须的颜色,黑色
capprops = {'color': "#000000"}, #设置箱线图顶端和末端横线的属性,颜色为绿色
ax=ax
)
ax.set_ylabel('AUROC', fontsize=20)
ax.set_xlabel('Model', fontsize=20)
ax.tick_params(axis="y", width=2, length=7, labelsize=15, direction='out')
ax.tick_params(axis="x", width=2, length=7, labelsize=15, direction='in')
ax.get_xticklabels()[4].set_color('red')
plt.rcParams['xtick.direction'] = 'in'
ax.yaxis.set_ticks_position('left')
plt.rcParams['ytick.direction'] = 'out'
ax.spines['right'].set_linewidth(2); ###设置底部坐标轴的粗细
ax.spines['bottom'].set_linewidth(2); ###设置底部坐标轴的粗细
ax.spines['left'].set_linewidth(2); ####设置左边坐标轴的粗细
ax.spines['top'].set_linewidth(2); ####设置左边坐标轴的粗细
ax.grid()
# 使用plt.savefig()时,显示两个子图,并且保存的是第二个子图,
# 此时使用plt.gcf().clear()释放掉plt的第二个子图
plt.gcf().clear() #获取当前图像并释放内存
# plt.savefig('results/compare_auc.svg',format="svg", bbox_inches = 'tight')
fig.savefig('results/compare_auc.svg',format="svg", bbox_inches = 'tight')
如果不使用plt.gcf().clear() 释放plt的图片内存,那么show出来的图将是两个子图,如下所示:
使用plt.gcf().clear() 释放plt的图片内存后,并用flg.savefig()保存图片,则保存的为sns画的图。