折線圖繪制與保存圖片
為了更好的去理解所有基礎繪圖功能,我們通過天氣溫度變化的繪圖來融合所有的基礎API使用
1、matplotlib.pyplot模塊
matplotlib.pytplot包含了一系列類似於matlab的畫圖函數。 它的函數作用於當前圖形(figure)的當前坐標系(axes)。
import matplotlib.pyplot as plt
2、折線圖繪制與顯示
展現上海一周的天氣,比如從星期一到星期日的天氣溫度如下
plt.figure(figsize=(10, 10)) x = [1, 2, 3, 4, 5, 6 ,7] # 周一到周末 y = [17,17,18,15,11,11,13] # 對應的天氣 plt.plot(x,y ) plt.show()
3、修改圖形大小與圖片保存
# 語法介紹 # plt.figure(figsize=(), dpi=) # figsize:指定圖的長寬 # dpi:圖像的清晰度 # 返回fig對象 # plt.savefig(path) plt.figure(figsize=(20, 8), dpi=80) plt.savefig("test.png")
三、溫度變化顯示
1、構造數據、顯示
# 畫出溫度變化圖 # 創建一個figure plt.figure(figsize=(20, 8), dpi=80) # 准備x, y坐標的數據 x = range(60) y_shanghai = [random.uniform(15, 18) for i in x] # 畫折線圖 plt.plot(x, y_shanghai, label="上海") plt.show()
2、自定義x,y刻度
-
plt.xticks(x, **kwargs)
x:要顯示的刻度值
-
plt.yticks(y, **kwargs)
y:要顯示的刻度值
# 增加以下兩行代碼 # 構造中文列表的字符串 x_ch = ["11點{}分".format(i) for i in x] y_ticks = range(40) # 修改x,y坐標的刻度 plt.xticks(x[::5], x_ch[::5]) plt.yticks(y_ticks[::5])
3、增加標題、x軸y軸描述信息
plt.xlabel("時間") plt.ylabel("溫度") plt.title("中午11點0分到12點之間的溫度變化圖示")
4、再添加一個城市的溫度變化
# 生成北京的溫度 y_beijing = [random.uniform(1, 3) for i in x] # 畫折線圖 1 plt.plot(x, y_shanghai, label="上海") # 使用plot可以多次畫多個折線 plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")
5、添加注釋
# 添加圖形注釋 plt.legend(loc="best")
6、多個坐標系顯示-plt.subplots
如果我們想要將上海和北京的天氣圖顯示在同一個圖的不同坐標系當中,效果如下:
可以通過subplots函數實現(舊的版本中有subplot,使用起來不方便),推薦subplots函數
# matplotlib.pyplot.subplots(nrows=1, ncols=1, **fig_kw) 創建一個帶有多個坐標系的圖 # Parameters: # nrows, ncols : int, optional, default: 1, Number of rows/columns of the subplot grid. # **fig_kw : All additional keyword arguments are passed to the figure() call. # Returns: # fig : 圖對象 # ax : # 設置標題等方法不同: # set_xticks # set_yticks # set_xlabel # set_ylabel
關於axes子坐標系的更多方法:參考https://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes
# 畫出溫度變化圖,展現在不同axes里面 # 創建一個figure fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=80) # 准備x, y坐標的數據 x = range(60) # y的刻度范圍 y_ticks = range(40) y_shanghai = [random.uniform(15, 18) for i in x] # 生成北京的溫度 y_beijing = [random.uniform(1, 3) for i in x] # 構造中文列表的字符串 x_ch = ["11點{}分".format(i) for i in x] # 畫折線圖 axes[0].plot(x, y_shanghai, label="上海") # 使用plot可以多次畫多個折線 axes[1].plot(x, y_beijing, color='r', linestyle='--', label="北京") # 美化x,y的刻度值 # 第一個參數必須是刻度數字類型,第二個是對應着第一個數字的中文描述 axes[0].set_xticks(x[::5], x_ch[::5]) axes[0].set_yticks(y_ticks[::5]) axes[1].set_xticks(x[::5], x_ch[::5]) axes[1].set_yticks(y_ticks[::5]) # 增加x,y描述信息和標題信息 axes[0].set_xlabel("時間") axes[0].set_ylabel("溫度") axes[1].set_xlabel("時間") axes[1].set_ylabel("溫度") axes[0].set_title("中午11點0分到12點之間的溫度變化圖示") axes[1].set_title("中午11點0分到12點之間的溫度變化圖示") axes[0].legend(loc="best") axes[1].legend(loc="best") plt.show()