Python Matplotlib如何绘制多子图
这篇文章将为大家详细讲解有关PythonMatplotlib如何绘制多子图,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
通过获取子图的label和线型来合并图例
注意添加label
#导入数据(读者可忽略)pre_lp=total_res#组合模型true=diff1[-pre_day:]#真实值pre_ph=results_data["yhat"]#prophetpre_lstm=reslut#lstmpre_ari=data_ari['data_pre']#arima#设置中文字体rcParams['font.sans-serif']='kaiti'#生成一个时间序列(读者可根据情况进行修改或删除)time=pd.to_datetime(np.arange(0,21),unit='D',origin=pd.Timestamp('2021-10-19'))#创建画布fig=plt.figure(figsize=(20,16))#figsize为画布大小#1ax1=fig.add_subplot(221)ax1.plot(time,pre_lp,color='#1bb9f6',marker='^',linestyle='-',label='1')#ax1.plot(time,true,color='#fd5749',marker='s',linestyle='-',label='true')ax1.set_title('1',fontsize=15)#设置标题ax1.set_xlabel('日期/天',fontsize=15)#设置横坐标名称ax1.set_ylabel('感染人数/人',fontsize=15)#设置纵坐标名称ax1.xaxis.set_major_formatter(mdate.DateFormatter('%m-%d'))#设置横坐标刻度(读者可忽略)plt.xticks(pd.date_range(time[0],time[-1],freq='D'),rotation=45)#设置横坐标刻度(读者可忽略)#2ax2=fig.add_subplot(222)ax2.plot(time,pre_ph,color='#739b06',marker='o',linestyle='-',label='2')#ax2.plot(time,true,color='#fd5749',marker='s',linestyle='-',label='true')ax2.set_title('2',fontsize=15)ax2.set_xlabel('日期/天',fontsize=15)ax2.set_ylabel('感染人数/人',fontsize=15)ax2.xaxis.set_major_formatter(mdate.DateFormatter('%m-%d'))plt.xticks(pd.date_range(time[0],time[-1],freq='D'),rotation=45)#3ax3=fig.add_subplot(223)ax3.plot(time,pre_lstm,color='#38d9a9',marker='*',linestyle='-',label='3')#ax3.plot(time,true,color='#fd5749',marker='s',linestyle='-',label='true')ax3.set_title('3',fontsize=15)ax3.set_xlabel('日期/天',fontsize=15)ax3.set_ylabel('感染人数/人',fontsize=15)ax3.xaxis.set_major_formatter(mdate.DateFormatter('%m-%d'))plt.xticks(pd.date_range(time[0],time[-1],freq='D'),rotation=45)#4ax4=fig.add_subplot(224)ax4.plot(time,pre_ari,color='#e666ff',marker='x',linestyle='-',label='4')ax4.plot(time,true,color='#fd5749',marker='s',linestyle='-',label='true')ax4.set_title('4',fontsize=15)ax4.set_xlabel('日期/天',fontsize=15)ax4.set_ylabel('感染人数/人',fontsize=15)ax4.xaxis.set_major_formatter(mdate.DateFormatter('%m-%d'))plt.xticks(pd.date_range(time[0],time[-1],freq='D'),rotation=45)#初始化labels和线型数组lines=[]labels=[]#通过循环获取线型和labelsforaxinfig.axes:axLine,axLabel=ax.get_legend_handles_labels()lines.extend(axLine)labels.extend(axLabel)#设置图例和调整图例位置fig.legend(lines,labels,loc='lowercenter',ncol=5,framealpha=False,fontsize=25)
结果如下图
这个时候我们再把原先代码里面的通过循环获取label和线型注释掉,代码如下
#导入数据(读者可忽略)pre_lp=total_res#组合模型true=diff1[-pre_day:]#真实值pre_ph=results_data["yhat"]#prophetpre_lstm=reslut#lstmpre_ari=data_ari['data_pre']#arima#设置中文字体rcParams['font.sans-serif']='kaiti'#生成一个时间序列(读者可根据情况进行修改或删除)time=pd.to_datetime(np.arange(0,21),unit='D',origin=pd.Timestamp('2021-10-19'))#创建画布fig=plt.figure(figsize=(20,16))#figsize为画布大小#1ax1=fig.add_subplot(221)ax1.plot(time,pre_lp,color='#1bb9f6',marker='^',linestyle='-',label='1')ax1.plot(time,true,color='#fd5749',marker='s',linestyle='-',label='true')ax1.set_title('1',fontsize=15)#设置标题ax1.set_xlabel('日期/天',fontsize=15)#设置横坐标名称ax1.set_ylabel('感染人数/人',fontsize=15)#设置纵坐标名称ax1.xaxis.set_major_formatter(mdate.DateFormatter('%m-%d'))#设置横坐标刻度(读者可忽略)plt.xticks(pd.date_range(time[0],time[-1],freq='D'),rotation=45)#设置横坐标刻度(读者可忽略)#2ax2=fig.add_subplot(222)ax2.plot(time,pre_ph,color='#739b06',marker='o',linestyle='-',label='2')ax2.plot(time,true,color='#fd5749',marker='s',linestyle='-',label='true')ax2.set_title('2',fontsize=15)ax2.set_xlabel('日期/天',fontsize=15)ax2.set_ylabel('感染人数/人',fontsize=15)ax2.xaxis.set_major_formatter(mdate.DateFormatter('%m-%d'))plt.xticks(pd.date_range(time[0],time[-1],freq='D'),rotation=45)#3ax3=fig.add_subplot(223)ax3.plot(time,pre_lstm,color='#38d9a9',marker='*',linestyle='-',label='3')ax3.plot(time,true,color='#fd5749',marker='s',linestyle='-',label='true')ax3.set_title('3',fontsize=15)ax3.set_xlabel('日期/天',fontsize=15)ax3.set_ylabel('感染人数/人',fontsize=15)ax3.xaxis.set_major_formatter(mdate.DateFormatter('%m-%d'))plt.xticks(pd.date_range(time[0],time[-1],freq='D'),rotation=45)#4ax4=fig.add_subplot(224)ax4.plot(time,pre_ari,color='#e666ff',marker='x',linestyle='-',label='4')ax4.plot(time,true,color='#fd5749',marker='s',linestyle='-',label='true')ax4.set_title('4',fontsize=15)ax4.set_xlabel('日期/天',fontsize=15)ax4.set_ylabel('感染人数/人',fontsize=15)ax4.xaxis.set_major_formatter(mdate.DateFormatter('%m-%d'))plt.xticks(pd.date_range(time[0],time[-1],freq='D'),rotation=45)#初始化labels和线型数组#lines=[]#labels=[]#通过循环获取线型和labels#foraxinfig.axes:#axLine,axLabel=ax.get_legend_handles_labels()#lines.extend(axLine)#labels.extend(axLabel)#设置图例和调整图例位置fig.legend(lines,labels,loc='lowercenter',ncol=5,framealpha=False,fontsize=25)
结果如下图
调整子图间距
plt.subplots_adjust(wspace=0.4,hspace=0.4)
wspace为子图之间宽间距,hspace为子图之间高间距
对比图如下
设置了间距的图像
没有设置间距的图像
关于“PythonMatplotlib如何绘制多子图”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。