Python Matplotlib绘制多子图详解
通过获取子图的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为子图之间高间距
对比图如下
设置了间距的图像
没有设置间距的图像
到此这篇关于Python Matplotlib绘制多子图详解的文章就介绍到这了,更多相关Python Matplotlib多子图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?