您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關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如何繪制多子圖”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。