使用Matplotlib画多子图的方法和代码是什么
Admin 2022-09-07 群英技术资讯 401 次浏览
通过获取子图的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转换时间戳,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
关键字nonlocal在Python 2 x中,闭包只能读外部函数的变量,而不能改写它。为了解决这个问题,Python 3 x引入了nonlocal关键字,在闭包内
这篇文章主要介绍了使用python tkinter实现各种个样的撩妹鼠标拖尾效果,本文通过实例代码,给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
这篇文章主要介绍了Django实现文件分享系统,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
本文给大家介绍的是c++ 调用python的内容,下文是c++中怎么样调用Python中封装的函数或接口的示例,有很详细的介绍,有这方面学习需要的朋友可以了解看看,那么接下来就跟随小编一起来学习一下吧。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008