使用Matplotlib画多子图的方法和代码是什么
Admin 2022-09-07 群英技术资讯 278 次浏览
通过获取子图的label和线型来合并图例
注意添加label
#导入数据(读者可忽略) pre_lp=total_res#组合模型 true=diff1[-pre_day:]#真实值 pre_ph=results_data["yhat"]#prophet pre_lstm=reslut#lstm pre_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为画布大小 # 1 ax1=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)#设置横坐标刻度(读者可忽略) # 2 ax2=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) # 3 ax3=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) # 4 ax4=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 for ax in fig.axes: axLine, axLabel = ax.get_legend_handles_labels() lines.extend(axLine) labels.extend(axLabel) #设置图例和调整图例位置 fig.legend(lines, labels,loc='lower center', ncol=5,framealpha=False,fontsize=25)
结果如下图
这个时候我们再把原先代码里面的通过循环获取label和线型注释掉,代码如下
#导入数据(读者可忽略) pre_lp=total_res#组合模型 true=diff1[-pre_day:]#真实值 pre_ph=results_data["yhat"]#prophet pre_lstm=reslut#lstm pre_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为画布大小 # 1 ax1=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)#设置横坐标刻度(读者可忽略) # 2 ax2=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) # 3 ax3=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) # 4 ax4=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 # for ax in fig.axes: # axLine, axLabel = ax.get_legend_handles_labels() # lines.extend(axLine) # labels.extend(axLabel) #设置图例和调整图例位置 fig.legend(lines, labels,loc='lower center', ncol=5,framealpha=False,fontsize=25)
结果如下图
调整子图间距
plt.subplots_adjust(wspace=0.4,hspace=0.4)
wspace为子图之间宽间距,hspace为子图之间高间距
对比图如下
设置了间距的图像
没有设置间距的图像
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
Python邮件处理怎样实现?对于邮件处理是比较常见的需求,下面小编就给大家介绍一下使用Python实现邮件处理的操作,下面示例具有一定的参考价值,感谢的朋友可以参考了解看看
在实际的工作中,我们经常会有这样的需求,一些功能需要执行,但是又可以不马上执行,这时候就可以使用延迟加载执行了。
Python临时文件的用处是什么?怎样创建和使用?一些朋友对于Python临时文件不是很了解,这篇文章就给大家分享一下关于Python临时文件的使用示例,感兴趣的朋友可以参考。
这篇文章主要介绍了Pytorch实现图像识别之数字识别(附详细注释),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
让我们探索numpy中一个更高级的概念,这个概念被称为广播。 广播展现了NumPy在算术运算期间是如何处理具有不同形状的数组的。 受到某些约束,较小的阵列将在较大的阵列上“广播”,以使它们具有相同形状。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008