最近写文章要用到子图,目标是一个大图中包含4个子图。画图可以用matplotlib,也可以用集成式的软件包seaborn。画子图最简单的方法就是用plt.subplot
()函数。
plt.subplt(行,列,第几个图)函数定义要画那张子图,其中行和列定义要画几张图,如plt.subplot(2,3,1)就是定义大图含有2行3列子图,就是6张图,第三位的1表示开始画第一张图,因此后面的图一次就是plt.subplot(2,3,2),plt.subplot(2,3,3),plt.subplot(2,3,4),plt.subplot(2,3,5, plt.subplot(2,3,6).
例如:
import seaborn as sns
import matplotlib.pyplot as plt
# 取用药时间的数据
data_t = data_c2.loc[:,["name","onset_days","leader_1st","E_pure","sample_type"]]
# 确定画布
plt.figure(figsize=(16,12))
# 画第1个子图
plt.subplot(221)
sns.stripplot(x="onset_days",y="leader_1st",data=data_t,hue="sample_type") # 使用seaborn画图
plt.ylim([-1,16]) #确定y轴标签值的范围
plt.yticks([0,2,4,6,8,10,12,14,16]) # 自定义确定y轴标签的值
plt.xticks(rotation=-60,size=12) # x轴标签旋转60度
plt.xlabel("Days of illness") # x轴标题
plt.ylabel(" E1 copies/ul") # y轴标题
# 画第2个子图,注释同上
plt.subplot(222)
sns.stripplot(x="onset_days",y="E_pure",data=data_t, hue="sample_type")
plt.ylim([-1,16])
plt.yticks([0,2,4,6,8,10,12,14,16])
plt.xticks(rotation=-60,size=12)
plt.xlabel("Days of illness")
plt.ylabel(" E2 copies/ul")
#画子图3
plt.subplot(223)
sns.stripplot(x="sample_time",y="leader_1st",data=data_t2,hue="sample_type",jitter=0.3)
plt.ylim([-1,16])
plt.yticks([0,2,4,6,8,10,12,14,16])
plt.xticks(rotation=-60,size=12) # x轴标签旋转60度
plt.xlabel("Days after treatment")
plt.ylabel("E1 copies/ul")
# 画子图4
plt.subplot(224)
sns.stripplot(x="sample_time",y="E_pure",data=data_t2, hue="sample_type",jitter=0.3)
plt.ylim([-1,16])
plt.yticks([0,2,4,6,8,10,12,14,16])
plt.xlabel("Days after treatment")
plt.ylabel("E2 copies/ul")
plt.xticks(rotation=-60,size=12)
# 保存图片
plt.savefig('figure_1.pdf',format='pdf')
就这样,一张图一行图的画,就可以画出子图(图中后期删除了图例和标签)。