Matplotlib基礎繪圖功能
一、Matplotlib之HelloWorld
1 什麼是Matplotlib
matplotlib是專門用於開發2D圖表(包括3D圖表)以漸進、互動式方式實現資料視覺化。
2 為什麼要學習Matplotlib
視覺化是在整個資料探勘的關鍵輔助工具,可以清晰的理解資料,從而調整我們的分析方法。
能將資料進行視覺化,更直觀的呈現
使資料更加客觀、更具說服力
例如下面兩個圖為數字展示和圖形展示:
3 實現一個簡單的Matplotlib畫圖 — 以折線圖為例
3.1 matplotlib.pyplot模組
matplotlib.pytplot包含了一系列類似於matlab的畫圖函式。
import matplotlib.pyplot as plt
3.2 圖形繪製流程:
- 建立畫布 – plt.figure()
plt.figure(figsize=(), dpi=)
figsize:指定圖的長寬
dpi:影像的清晰度
返回fig物件
2.繪製影像 – plt.plot(x, y)
以折線圖為例
3.顯示影像 – plt.show()
3.3 折線圖繪製與顯示
舉例:展現上海一週的天氣,比如從星期一到星期日的天氣溫度如下
import matplotlib.pyplot as plt
# 1.建立畫布
plt.figure(figsize=(10, 10), dpi=100)
# 2.繪製折線圖
plt.plot([1, 2, 3, 4, 5, 6 ,7], [17,17,18,15,11,11,13])
# 3.顯示影像
plt.show()
折線圖
4 認識Matplotlib影像結構(瞭解)
二、基礎繪圖功能 — 以折線圖為例
1 完善原始折線圖 — 給圖形新增輔助功能
為了更好地理解所有基礎繪圖功能,我們通過天氣溫度變化的繪圖來融合所有的基礎API使用
需求:畫出某城市11點到12點1小時內每分鐘的溫度變化折線圖,溫度範圍在15度~18度
效果:
1.1 準備資料並畫出初始折線圖
import matplotlib.pyplot as plt
import random
# 畫出溫度變化圖
# 0.準備x, y座標的資料
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
# 1.建立畫布
plt.figure(figsize=(20, 8), dpi=80)
# 2.繪製折線圖
plt.plot(x, y_shanghai)
# 3.顯示影像
plt.show()
1.2 新增自定義x,y刻度
-
plt.xticks(x, **kwargs)
x:要顯示的刻度值 -
plt.yticks(y, **kwargs)
y:要顯示的刻度值
# 剛才的程式碼增加以下兩行
# 構造x軸刻度標籤
x_ticks_label = ["11點{}分".format(i) for i in x]
# 構造y軸刻度
y_ticks = range(40)
# 修改x,y軸座標的刻度顯示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
如果沒有解決過中文問題的話,會顯示這個樣子:
解決方案:https://yangyongli.blog.csdn.net/article/details/109232609
1.4 新增網格顯示
為了更加清楚地觀察圖形對應的值
plt.grid(True, linestyle='--', alpha=0.5)
1.5 新增描述資訊
新增x軸、y軸描述資訊及標題
通過fontsize引數可以修改影像中字型的大小
plt.xlabel("時間")
plt.ylabel("溫度")
plt.title("中午11點0分到12點之間的溫度變化圖示", fontsize=20)
1.6 影像儲存
# 儲存圖片到指定路徑
plt.savefig("test.png")
注意:plt.show()會釋放figure資源,如果在顯示影像之後儲存圖片將只能儲存空圖片。
完整程式碼:
import matplotlib.pyplot as plt
import random
from pylab import mpl
# 設定顯示中文字型
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 設定正常顯示符號
mpl.rcParams["axes.unicode_minus"] = False
# 0.準備資料
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
# 1.建立畫布
plt.figure(figsize=(20, 8), dpi=100)
# 2.繪製影像
plt.plot(x, y_shanghai)
# 2.1 新增x,y軸刻度
# 構造x,y軸刻度標籤
x_ticks_label = ["11點{}分".format(i) for i in x]
y_ticks = range(40)
# 刻度顯示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
# 2.2 新增網格顯示
plt.grid(True, linestyle="--", alpha=0.5)
# 2.3 新增描述資訊
plt.xlabel("時間")
plt.ylabel("溫度")
plt.title("中午11點--12點某城市溫度變化圖", fontsize=20)
# 2.4 影像儲存
plt.savefig("./test.png")
# 3.影像顯示
plt.show()
2 在一個座標系中繪製多個影像
2.1 多次plot
需求:再新增一個城市的溫度變化
收集到北京當天溫度變化情況,溫度在1度到3度。怎麼去新增另一個在同一座標系當中的不同圖形,其實很簡單隻需要再次plot即可,但是需要區分線條,如下顯示
# 增加北京的溫度資料
y_beijing = [random.uniform(1, 3) for i in x]
# 繪製折線圖
plt.plot(x, y_shanghai)
# 使用多次plot可以畫多個折線
plt.plot(x, y_beijing, color='r', linestyle='--')
我們仔細觀察,用到了兩個新的地方,一個是對於不同的折線展示效果,一個是新增圖例。
2.2 設定圖形風格
2.3 顯示圖例
注意:如果只在plt.plot()中設定label還不能最終顯示出圖例,還需要通過plt.legend()將圖例顯示出來。
# 繪製折線圖
plt.plot(x, y_shanghai, label="上海")
# 使用多次plot可以畫多個折線
plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")
# 顯示圖例
plt.legend(loc="best")
Location String Location Code
完整程式碼:
# 0.準備資料
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]
# 1.建立畫布
plt.figure(figsize=(20, 8), dpi=100)
# 2.繪製影像
plt.plot(x, y_shanghai, label="上海")
plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")
# 2.1 新增x,y軸刻度
# 構造x,y軸刻度標籤
x_ticks_label = ["11點{}分".format(i) for i in x]
y_ticks = range(40)
# 刻度顯示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
# 2.2 新增網格顯示
plt.grid(True, linestyle="--", alpha=0.5)
# 2.3 新增描述資訊
plt.xlabel("時間")
plt.ylabel("溫度")
plt.title("中午11點--12點某城市溫度變化圖", fontsize=20)
# 2.4 影像儲存
plt.savefig("./test.png")
# 2.5 新增圖例
plt.legend(loc=0)
# 3.影像顯示
plt.show()
3 多個座標系顯示— plt.subplots(物件導向的畫圖方法)
如果我們想要將上海和北京的天氣圖顯示在同一個圖的不同座標系當中,效果如下:
可以通過subplots函式實現(舊的版本中有subplot,使用起來不方便),推薦subplots函式
-
matplotlib.pyplot.subplots(nrows=1, ncols=1, **fig_kw) 建立一個帶有多個axes(座標系/繪圖區)的圖
Parameters: nrows, ncols : 設定有幾行幾列座標系 int, optional, default: 1, Number of rows/columns of the subplot grid. Returns: fig : 圖物件 axes : 返回相應數量的座標系 設定標題等方法不同: set_xticks set_yticks set_xlabel set_ylabel
關於axes子座標系的更多方法:參考https://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes
- 注意:plt.函式名()相當於程式導向的畫圖方法,axes.set_方法名()相當於物件導向的畫圖方法。
# 0.準備資料
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
y_beijing = [random.uniform(1, 5) for i in x]
# 1.建立畫布
# plt.figure(figsize=(20, 8), dpi=100)
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(20, 8), dpi=100)
# 2.繪製影像
# plt.plot(x, y_shanghai, label="上海")
# plt.plot(x, y_beijing, color="r", linestyle="--", label="北京")
axes[0].plot(x, y_shanghai, label="上海")
axes[1].plot(x, y_beijing, color="r", linestyle="--", label="北京")
# 2.1 新增x,y軸刻度
# 構造x,y軸刻度標籤
x_ticks_label = ["11點{}分".format(i) for i in x]
y_ticks = range(40)
# 刻度顯示
# plt.xticks(x[::5], x_ticks_label[::5])
# plt.yticks(y_ticks[::5])
axes[0].set_xticks(x[::5])
axes[0].set_yticks(y_ticks[::5])
axes[0].set_xticklabels(x_ticks_label[::5])
axes[1].set_xticks(x[::5])
axes[1].set_yticks(y_ticks[::5])
axes[1].set_xticklabels(x_ticks_label[::5])
# 2.2 新增網格顯示
# plt.grid(True, linestyle="--", alpha=0.5)
axes[0].grid(True, linestyle="--", alpha=0.5)
axes[1].grid(True, linestyle="--", alpha=0.5)
# 2.3 新增描述資訊
# plt.xlabel("時間")
# plt.ylabel("溫度")
# plt.title("中午11點--12點某城市溫度變化圖", fontsize=20)
axes[0].set_xlabel("時間")
axes[0].set_ylabel("溫度")
axes[0].set_title("中午11點--12點某城市溫度變化圖", fontsize=20)
axes[1].set_xlabel("時間")
axes[1].set_ylabel("溫度")
axes[1].set_title("中午11點--12點某城市溫度變化圖", fontsize=20)
# # 2.4 影像儲存
plt.savefig("./test.png")
# # 2.5 新增圖例
# plt.legend(loc=0)
axes[0].legend(loc=0)
axes[1].legend(loc=0)
# 3.影像顯示
plt.show()
4 折線圖的應用場景
呈現公司產品(不同區域)每天活躍使用者數
呈現app每天下載數量
呈現產品新功能上線後,使用者點選次數隨時間的變化
擴充:畫各種數學函式影像
注意:plt.plot()除了可以畫折線圖,也可以用於畫各種數學函式影像
程式碼:
import numpy as np
# 0.準備資料
x = np.linspace(-10, 10, 1000)
y = np.sin(x)
# 1.建立畫布
plt.figure(figsize=(20, 8), dpi=100)
# 2.繪製函式影像
plt.plot(x, y)
# 2.1 新增網格顯示
plt.grid()
# 3.顯示影像
plt.show()
相關文章
- Matplotlib繪圖基礎繪圖
- 大資料分析/機器學習基礎之matplotlib繪圖篇大資料機器學習繪圖
- Python-matplotlib-入門教程(一)-基礎圖表繪製Python
- 【matplotlib基礎】--結合地圖地圖
- Matplotlib 詳細繪圖繪圖
- 【matplotlib基礎】--3D圖形3D
- Android 繪圖基礎Android繪圖
- 繪圖: matplotlib Basemap簡介繪圖
- python繪圖之matplotlibPython繪圖
- Matplotlib.pyplot.plot 繪圖繪圖
- 【Android繪圖】繪圖之基礎篇(一)Android繪圖
- python程式設計基礎:深度學習基礎:繪相簿之matplotlib(1)Python程式設計深度學習
- JavaGUI——繪圖技術基礎JavaGUI繪圖
- Android UI 繪圖基礎AndroidUI繪圖
- 繪圖: Python matplotlib簡介繪圖Python
- Matplotlib直方圖繪製技巧直方圖
- 【matplotlib基礎】--動畫動畫
- Shader 繪製基礎圖形
- Python matplotlib繪製散點圖Python
- python使用matplotlib繪圖詳解Python繪圖
- 圖形影像處理之繪圖基礎繪圖
- gojs 流程圖框架-基礎繪圖(一)GoJS流程圖框架繪圖
- Matplotlib基礎:subplot多子圖index引數解釋Index
- Android 自定義 View 繪圖基礎AndroidView繪圖
- 利用 Matplotlib 繪製資料圖形(一)
- 利用 Matplotlib 繪製資料圖形(二)
- 使用Matplotlib繪製3D圖形3D
- Matplotlib呼叫imshow()函式繪製熱圖函式
- matplotlib的直方圖繪製(筆記)直方圖筆記
- Python Matplotlib繪製氣溫圖表Python
- Python之matplotlib基礎Python
- Python 利用pandas和matplotlib繪製餅圖Python
- 使用python matplotlib實現動圖繪製Python
- python: matplotlib-繪製精美的圖表Python
- matplotlib 繪圖視覺化知識點整理繪圖視覺化
- 5-Windows程式設計 -繪圖基礎Windows程式設計繪圖
- WPF基礎:在Canvas上繪製圖形Canvas
- [Python] Matplotlib 圖表的繪製和美化技巧Python