Python可视化模块——Matplotlib(2)
學(xué)習(xí)目標(biāo)
- 目標(biāo) - 學(xué)習(xí)折線圖的繪制和圖形保存
- 給圖形添加輔助功能(如:標(biāo)注、x,y軸名稱、標(biāo)題等)
- 多次plot繪制圖形
- 多個坐標(biāo)系顯示圖形
- 知道折線圖的應(yīng)用場景
 
- 應(yīng)用 - 天氣的溫度變化顯示
 
1 折線圖繪制與保存圖片
為了更好地理解所有基礎(chǔ)繪圖功能,我們通過天氣溫度變化的繪圖來融合所有的基礎(chǔ)API使用
1.1 matplotlib.pyplot模塊
matplotlib.pytplot包含了一系列類似于matlab的畫圖函數(shù)。 它的函數(shù)作用于當(dāng)前圖形(figure)的當(dāng)前坐標(biāo)系(axes)。
import matplotlib.pyplot as plt1.2 折線圖繪制與顯示
展現(xiàn)上海一周的天氣,比如從星期一到星期日的天氣溫度如下
# 1.創(chuàng)建畫布(容器層) plt.figure(figsize=(10, 10))# 2.繪制折線圖(圖像層) plt.plot([1, 2, 3, 4, 5, 6 ,7], [17,17,18,15,11,11,13])# 3.顯示圖像 plt.show()可以看到這樣顯示效果并不好,我們可以加入更多的功能:
1.3 設(shè)置畫布屬性與圖片保存
plt.figure(figsize=(), dpi=)figsize:指定圖的長寬dpi:圖像的清晰度返回fig對象 plt.savefig(path) # 1.創(chuàng)建畫布,并設(shè)置畫布屬性 plt.figure(figsize=(20, 8), dpi=80) # 2.保存圖片到指定路徑 plt.savefig("test.png")- 注意:plt.show()會釋放figure資源,如果在顯示圖像之后保存圖片將只能保存空圖片。
2 完善原始折線圖1(輔助顯示層)
案例:顯示溫度變化狀況
需求:畫出某城市11點到12點1小時內(nèi)每分鐘的溫度變化折線圖,溫度范圍在15度~18度
2.1 準(zhǔn)備數(shù)據(jù)并畫出初始折線圖
# 畫出溫度變化圖# 0.準(zhǔn)備x, y坐標(biāo)的數(shù)據(jù) x = range(60) y_shanghai = [random.uniform(15, 18) for i in x]# 1.創(chuàng)建畫布 plt.figure(figsize=(20, 8), dpi=80)# 2.繪制折線圖 plt.plot(x, y_shanghai)# 3.顯示圖像 plt.show()?
2.2 添加自定義x,y刻度
-  plt.xticks(x, **kwargs) x:要顯示的刻度值 
-  plt.yticks(y, **kwargs) y:要顯示的刻度值 
如果沒有解決過中文問題的話,會顯示這個樣子:
?
2.3 中文顯示問題解決
1 在每次寫代碼之前,我們加入如下兩行代碼:
plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標(biāo)簽 plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負(fù)號2 下載中文字體(黑體,看準(zhǔn)系統(tǒng)版本)
-  下載?SimHei?字體(或者其他的支持中文顯示的字體也行) 
-  安裝字體 -  linux下:拷貝字體到 usr/share/fonts 下: sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttf
-  windows和mac下:雙擊安裝 
 
-  
-  刪除~/.matplotlib中的緩存文件 cd ~/.matplotlib rm -r *
-  修改配置文件matplotlibrc vi ~/.matplotlib/matplotlibrc將文件內(nèi)容修改為: font.family : sans-serif font.sans-serif : SimHei axes.unicode_minus : False
2.4 添加網(wǎng)格顯示
為了更加清楚地觀察圖形對應(yīng)的值
plt.grid(True, linestyle='--', alpha=0.5)2.5 添加描述信息
添加x軸、y軸描述信息及標(biāo)題
plt.xlabel("時間") plt.ylabel("溫度") plt.title("中午11點0分到12點之間的溫度變化圖示")3 完善原始折線圖2(圖像層)
3.1 多次plot
需求:再添加一個城市的溫度變化
收集到北京當(dāng)天溫度變化情況,溫度在1度到3度。怎么去添加另一個在同一坐標(biāo)系當(dāng)中的不同圖形,其實很簡單只需要再次plot即可,但是需要區(qū)分線條:
# 增加北京的溫度數(shù)據(jù) y_beijing = [random.uniform(1, 3) for i in x]# 繪制折線圖 plt.plot(x, y_shanghai, label="上海") # 使用多次plot可以畫多個折線 plt.plot(x, y_beijing, color='r', linestyle='--', label="北京")# 顯示圖例 plt.legend(loc="best")?
我們仔細(xì)觀察,用到了兩個新的地方,一個是對于不同的折線展示效果,一個是添加圖例。
3.2 設(shè)置圖形風(fēng)格
| r 紅色 | - 實線 | 
| g 綠色 | - - 虛線 | 
| b 藍(lán)色 | -. 點劃線 | 
| w 白色 | : 點虛線 | 
| c 青色 | ' ' 留空、空格 | 
| m 洋紅 | |
| y 黃色 | |
| k 黑色 | 
完整代碼:
import random# 多次plot # 0.創(chuàng)建數(shù)據(jù) x = range(60) y_shanghai = [random.uniform(15,18) for i in x] y_beijing = [random.uniform(-5, 5) for i in x]# 1.創(chuàng)建畫布 plt.figure(figsize=(20, 8), dpi=100)# 2.繪制圖 plt.plot(x, y_shanghai, label="上海", color="r", linestyle="--") plt.plot(x, y_beijing, label="北京")# 2.1 添加x,y軸的刻度 x_labels_ticks = ["11點{}分".format(i) for i in x] y_labels_ticks = range(-10, 30)plt.xticks(x[::5], x_labels_ticks[::5]) plt.yticks(y_labels_ticks[::5])# 2.2 添加網(wǎng)格線 plt.grid(linestyle="--", alpha=0.5)# 2.3 添加描述信息 plt.xlabel("時間", fontsize=16) plt.ylabel("溫度", fontsize=16) plt.title("某城市11點-12點溫度變化", fontsize=20)# 2.4 增加圖例 plt.legend(loc="best")# 3.顯示 plt.show()?
4 多個坐標(biāo)系顯示-plt.subplots(面向?qū)ο蟮漠媹D方法)
如果我們想要將上海和北京的天氣圖顯示在同一個圖的不同坐標(biāo)系當(dāng)中,效果如下:
可以通過subplots函數(shù)實現(xiàn)(舊的版本中有subplot,使用起來不方便),推薦subplots函數(shù)
-  matplotlib.pyplot.subplots(nrows=1, ncols=1, **fig_kw) 創(chuàng)建一個帶有多個axes(坐標(biāo)系/繪圖區(qū))的圖 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 : 設(shè)置標(biāo)題等方法不同:set_xticksset_yticksset_xlabelset_ylabel關(guān)于axes子坐標(biāo)系的更多方法:參考?https://matplotlib.org/stable/api/axes_api.html 
-  注意:plt.函數(shù)名()相當(dāng)于面向過程的畫圖方法,axes.set_方法名()相當(dāng)于面向?qū)ο蟮漠媹D方法。 
5 折線圖的應(yīng)用場景
-  呈現(xiàn)公司產(chǎn)品(不同區(qū)域)每天活躍用戶數(shù) 
-  呈現(xiàn)app每天下載數(shù)量 
-  呈現(xiàn)產(chǎn)品新功能上線后,用戶點擊次數(shù)隨時間的變化 
-  拓展:畫各種數(shù)學(xué)函數(shù)圖像 -  注意:plt.plot()除了可以畫折線圖,也可以用于畫各種數(shù)學(xué)函數(shù)圖像 
 
-  
代碼:
import numpy as np # 0.準(zhǔn)備數(shù)據(jù) x = np.linspace(-10, 10, 1000) y = np.sin(x)# 1.創(chuàng)建畫布 plt.figure(figsize=(20, 8), dpi=100)# 2.繪制函數(shù)圖像 plt.plot(x, y) # 2.1 添加網(wǎng)格顯示 plt.grid()# 3.顯示圖像 plt.show()?
6 小結(jié)
- 圖像保存【知道】 - plt.savefig("路徑")
 
- 添加x,y軸刻度【知道】 - plt.xticks()
- plt.yticks()
- 注意:在傳遞進(jìn)去的第一個參數(shù)必須是數(shù)字,不能是字符串,如果是字符串嗎,需要進(jìn)行替換操作
 
- 添加網(wǎng)格顯示【知道】 - plt.grid(linestyle="--", alpha=0.5)
 
- 添加描述信息【知道】 - plt.xlabel()
- plt.ylabel()
- plt.title()
 
- 多次plot【了解】 - 直接進(jìn)行添加就OK
 
- 顯示圖例【知道】 - plt.legend(loc="best")
- 注意:一定要在plt.plot()里面設(shè)置一個label,如果不設(shè)置,沒法顯示
 
- 多個坐標(biāo)系顯示【了解】 - plt.subplots(nrows=, ncols=)
 
- 折線圖的應(yīng)用【知道】 - 1.應(yīng)用于觀察數(shù)據(jù)的變化
- 2.可是畫出一些數(shù)學(xué)函數(shù)圖像
 
總結(jié)
以上是生活随笔為你收集整理的Python可视化模块——Matplotlib(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 抽象是什么
- 下一篇: .properties文件加载失败
