這段跟之前的操作單獨的一個繪圖區的代碼整個過程幾乎是一致的,區別主要有兩點:
- 一是使用索引來確定要操作的是哪個繪圖區,比如這里的axes[0]和axes[1]。每一行中定義的繪圖區用一個一維數組來表示,如果創建的是兩行兩列的繪圖區,則整個繪圖區會保存在一個二維數組里面,表示為axes[0][0]這種格式。
- 二是當我們設置x軸和y軸的值時,原來使用的xticks和yticks方法,但現在使用axes.set_xticks和set_yticks這種更偏向於面向對象的函數調用方法來進行操作,包括像設置x軸和y軸的標簽以及設置圖形標題等,都是使用set_title,set_label這樣的形式。
import matplotlib.pyplot as plt
# %matplotlib inline
from tools.plt_test import weather
weathers = weather.weather_day() # 獲取最近七天天氣的方法
x = [] # 存放近七天的日期
low = [] # 存放近七天的最低溫度
high = [] # 存放近七天的最高溫度
diff = [] # 存放近七天的溫差
# 獲取日期,最高溫,最低溫,溫差
for i in weathers:
print(weathers[i])
x.append(weathers[i]['time'].split('-', 1)[1])
low.append(int(weathers[i]['min_degree']))
high.append(int(weathers[i]['max_degree']))
# 獲取溫差
for l, h in zip(low, high):
diff.append(h - l)
# 顯示中文
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解決無法顯示負號
plt.rcParams['axes.unicode_minus'] = False
# 創建一個1行2列的畫布
figure, axes = plt.subplots(ncols=2, nrows=1, figsize=(13, 5), dpi=100)
# 繪圖對象
ax1 = axes[0]
ax2 = axes[1]
# ax1 config
# 設置標題
ax1.set_title('天氣走勢圖')
# x軸描述
ax1.set_xlabel('日期')
# y軸描述
ax1.set_ylabel('溫度')
# 添加網格顯示,linestyle網格樣式,alpha透明度
ax1.grid(linestyle=':', alpha=0.5)
# 一條折線
ax1.plot(x, low, label='最高溫')
# 另一條折線
ax1.plot(x, high, label='最低溫')
# 右上角顯示圖例
ax1.legend()
# ax2 config
# 設置標題
ax2.set_title('高低溫差圖')
# x軸描述
ax2.set_xlabel('日期')
# y軸描述
ax2.set_ylabel('溫度')
# 添加網格顯示,linestyle網格樣式,alpha透明度
ax2.grid(linestyle=':', alpha=0.5)
# 一條折線
ax2.plot(x, diff, label='高低溫差', color='green')
# y軸范圍,間距
ax2.set_yticks(range(0, 16, 1))
# 右上角顯示圖例
ax2.legend()
# 保存圖片,顯示繪圖
plt.savefig('weather_demo.png')
plt.show()