Python Matplotlib如何绘制多子图
发表于:2025-11-13 作者:千家信息网编辑
千家信息网最后更新 2025年11月13日,这篇文章将为大家详细讲解有关Python Matplotlib如何绘制多子图,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。通过获取子图的label和线型来合并图例注
千家信息网最后更新 2025年11月13日Python Matplotlib如何绘制多子图
这篇文章将为大家详细讲解有关Python Matplotlib如何绘制多子图,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
通过获取子图的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为画布大小# 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=[]#通过循环获取线型和labelsfor 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"]#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为画布大小# 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为子图之间高间距
对比图如下
设置了间距的图像
没有设置间距的图像
关于"Python Matplotlib如何绘制多子图"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
人数
日期
读者
横坐标
线型
图例
间距
刻度
名称
画布
篇文章
循环
调整
多子
中文字体
之间
代码
位置
图像
大小
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
达梦数据库实例服务密码
英雄联盟云顶手游服务器错误
软件开发 做工好的本本
三个月转软件开发
高中网络技术应用课本
数据库的原理和技术
网吧电脑服务器哪个牌子好
关于网络安全的议论文开头结尾
类似美摄的软件开发
爱艺奇服务器
洞口县网络安全宣传周活动
微信开发者工具云数据库
互联网数据库技术与应用
济南软件开发工资1万5
服务器机柜面板布局
导入数据库怎么导入
更好的视频会议软件开发
皇室战争手机版怎么改服务器
网络安全的十大金句
网络安全高一征文
分离和删除数据库有什么不同
陕西网络时间服务器模块
天龙八部的游戏服务器
wind数据库能源
永宁县软件开发公司找哪家
工业网络安全建设方案
有关网络安全的感受
博浪软件开发公司
数据库删除教师表
甘南网络安全知识大比拼