Python Matplotlib如何绘制多子图
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章将为大家详细讲解有关Python Matplotlib如何绘制多子图,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。通过获取子图的label和线型来合并图例注
千家信息网最后更新 2026年11月02日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安全错误
数据库的锁怎样保障安全
山东特亿宝互联网科技有限公司
互联网最新的科技
互联网科技卖菜
金诺互联网科技
中资互联网科技
狮子座互联网科技
中国互联网科技发展
迪茉互联网科技
深圳齐家互联网科技
广州市恰铎互联网科技有限公司
互联网科技研发水平
滨湖区互联网智能科技产品有哪些
科技互联网的核心竞争力
深圳互联网科技的发展
城市宝互联网科技有限公司
卡尔迅互联网科技有限公司
同城互联网络科技
北京军民互联网科技公司
青岛易易互联网科技
承德科技产业互联网平台
互联网科技的发展
金融科技与互联网金融
科技互联网创业计划书
博兴的互联网电子科技公司
哈尔滨新华互联网科技学院
互联网软件和科技
河南猎农互联网科技有限公司
互联网媒体平台算高科技产业
小米互联网科技园入驻
宇信科技在杭州互联网排第几