1 绘图风格设置

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import numpy as np

plt.style.use('classic')
plt.rcParams['font.sans-serif']='STSong'
plt.rcParams['axes.unicode_minus']=False
plt.rcParams['font.size']=8
plt.rcParams['figure.dpi']=200
plt.rcParams["axes.grid"] = False

2 配色

这里仅作示范,真实数据相关代码已经隐去

# 设置配色
sns.set_palette(sns.cubehelix_palette(4, start = .5, rot = -.85))
# 绘制箱型图
sns.boxplot(data=data_df, x="model", y="auc_avg", order=key_list, hue='分类器', hue_order=["支持向量机", "逻辑回归", "随机森林"], linewidth=0.8)
plt.xlabel("(a) K-mer分词+词袋模型分词结果")
plt.ylabel("交叉验证分类准确率")
plt.legend(loc="lower left", fontsize=10)
plt.ylim([0.48, 0.9])

效果如下图所示
在这里插入图片描述

3 加上网格

在有些场景中,给图片加上网格线会有更好的效果:
在这里插入图片描述
由于在第一小节的绘图风格设置中默认取消了网格线,要实现这样的效果,只需要在绘制每个子图的时候添加如下代码即可:

plt.grid(True)

4 多子图

import matplotlib

plt.style.use('classic')
plt.rcParams['font.sans-serif']='STSong'
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
plt.rcParams['font.size']=12
plt.rcParams['figure.dpi']=200
plt.rcParams["axes.grid"] = False
xrange = [3, 5, 7, 9, 11, 13, 15, 17, 19]

plt.figure(figsize=(12, 8), facecolor='white')
plt.subplots_adjust(hspace=0.2, wspace=0.2)
sns.set_palette('gist_earth', 7)

plt.subplot(3,3,1)#创建子图,给定位置描述,把整个figure第一行分成1列。
plt.plot(xrange, final_acc_list[0][0], marker='s', label=feature_name_list[0], linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[0][1], marker='o', label=feature_name_list[1], linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[0][2], marker='X', label=feature_name_list[2], linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[0][3], marker='^', label=feature_name_list[3], linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[0][4], marker='p', label=feature_name_list[4], linewidth=1, markersize=4)
plt.xlim([3, 19])
plt.axvspan(13, 15, facecolor='gray', alpha=0.1, zorder=0, linewidth=0)
plt.legend(loc="upper center", ncol=5, bbox_to_anchor=(1.7, 1.4), fontsize=12)
plt.xticks([])
plt.ylabel("交叉验证准确率")
plt.title(epitope_list[0], fontsize=12)
 
plt.subplot(3,3,2)#创建子图,给定位置描述,把整个figure第2行分成3列。第四个开始
plt.xticks([])
plt.xlim([3, 19])
plt.plot(xrange, final_acc_list[1][0], marker='s', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[1][1], marker='o', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[1][2], marker='X', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[1][3], marker='^', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[1][4], marker='p', linewidth=1, markersize=4)
plt.axvspan(13, 15, facecolor='gray', alpha=0.1, zorder=0, linewidth=0)
plt.title(epitope_list[1], fontsize=12)

plt.subplot(3,3,3)
plt.xticks([])
plt.xlim([3, 19])
plt.plot(xrange, final_acc_list[2][0], marker='s', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[2][1], marker='o', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[2][2], marker='X', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[2][3], marker='^', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[2][4], marker='p', linewidth=1, markersize=4)
plt.axvspan(13, 15, facecolor='gray', alpha=0.1, zorder=0, linewidth=0)
plt.title(epitope_list[2], fontsize=12)
 
plt.subplot(3,3,4)#这里可以把逗号去掉,matplotlib还是可以识别的。
plt.ylabel("交叉验证准确率")
plt.xticks([])
plt.xlim([3, 19])
plt.plot(xrange, final_acc_list[3][0], marker='s', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[3][1], marker='o', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[3][2], marker='X', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[3][3], marker='^', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[3][4], marker='p', linewidth=1, markersize=4)
plt.axvspan(13, 15, facecolor='gray', alpha=0.1, zorder=0, linewidth=0)
plt.title(epitope_list[3], fontsize=12)

plt.subplot(3,3,5)
plt.xticks([])
plt.xlim([3, 19])
plt.plot(xrange, final_acc_list[4][0], marker='s', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[4][1], marker='o', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[4][2], marker='X', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[4][3], marker='^', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[4][4], marker='p', linewidth=1, markersize=4)
plt.axvspan(13, 15, facecolor='gray', alpha=0.1, zorder=0, linewidth=0)
plt.title(epitope_list[4], fontsize=12)

plt.subplot(3,3,6)
plt.xticks([])
plt.xlim([3, 19])
plt.plot(xrange, final_acc_list[5][0], marker='s', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[5][1], marker='o', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[5][2], marker='X', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[5][3], marker='^', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[5][4], marker='p', linewidth=1, markersize=4)
plt.axvspan(13, 15, facecolor='gray', alpha=0.1, zorder=0, linewidth=0)
plt.title(epitope_list[5], fontsize=12)

plt.subplot(3,3,7)
plt.xlabel("窗口大小")
plt.ylabel("交叉验证准确率")
plt.xlim([3, 19])
plt.plot(xrange, final_acc_list[6][0], marker='s', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[6][1], marker='o', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[6][2], marker='X', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[6][3], marker='^', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[6][4], marker='p', linewidth=1, markersize=4)
plt.axvspan(13, 15, facecolor='gray', alpha=0.1, zorder=0, linewidth=0)
plt.title(epitope_list[6], fontsize=12)
plt.xticks(xrange)

plt.subplot(3,3,8)
plt.xlabel("窗口大小")
plt.xlim([3, 19])
plt.plot(xrange, final_acc_list[7][0], marker='s', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[7][1], marker='o', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[7][2], marker='X', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[7][3], marker='^', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[7][4], marker='p', linewidth=1, markersize=4)
plt.axvspan(13, 15, facecolor='gray', alpha=0.1, zorder=0, linewidth=0)
plt.title(epitope_list[7], fontsize=12)
plt.xticks(xrange)

plt.subplot(3,3,9)
plt.xlabel("窗口大小")
plt.xlim([3, 19])
plt.plot(xrange, final_acc_list[8][0], marker='s', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[8][1], marker='o', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[8][2], marker='X', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[8][3], marker='^', linewidth=1, markersize=4)
plt.plot(xrange, final_acc_list[8][4], marker='p', linewidth=1, markersize=4)
plt.axvspan(13, 15, facecolor='gray', alpha=0.1, zorder=0, linewidth=0)
plt.title(epitope_list[8], fontsize=12)
plt.xticks(xrange)
plt.savefig('./ppc_result.pdf')

最终效果:
在这里插入图片描述
(完)

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐