matplotlib绘制多个子图,matplotlib 多图绘制

  matplotlib绘制多个子图,matplotlib 多图绘制

  Matplotlib是大蟒中最受欢迎的数据可视化软件包之一,它是大蟒常用的2D绘图库,同时它也提供了一部分三维(三维的缩写)绘图接口。本文将详细介绍如何通过Matplotlib绘制多子图,以及合并图例和调整子图间距,需要的可以参考一下

  通过获取子图的标签和线型来合并图例

  注意添加标签

  #导入数据(读者可忽略)

  pre_lp=total_res#组合模型

  true=diff1[-pre_day:]#真实值

  pre _ ph=results _ data[ yhat ]#先知

  pre_lstm=reslut#lstm

  预阿里=数据阿里[数据预]# ARIMA

  #设置中文字体

  RC params[ font。无衬线]= kaiti

  # 生成一个时间序列(读者可根据情况进行修改或删除)

  时间=PD。to _ datetime(NP。arange(0,21),unit=D ,

  原点=pd .时间戳( 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。x刻度(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 .日期格式化程序(" % m-% d "))

  PLT。x刻度(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 .日期格式化程序(" % m-% d "))

  PLT。x刻度(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 .日期格式

  er(%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和线型注释掉,代码如下

  

#导入数据(读者可忽略)

 

  结果如下图

  

 

  调整子图间距

  

plt.subplots_adjust(wspace=0.4,hspace=0.4)

 

  wspace为子图之间宽间距,hspace为子图之间高间距

  对比图如下

  设置了间距的图像

  

 

  没有设置间距的图像

  

 

  到此这篇关于Python Matplotlib绘制多子图详解的文章就介绍到这了,更多相关Python Matplotlib多子图内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: