日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python可视化模块——Matplotlib(2)

發布時間:2023/12/15 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python可视化模块——Matplotlib(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習目標

  • 目標
    • 學習折線圖的繪制和圖形保存
    • 給圖形添加輔助功能(如:標注、x,y軸名稱、標題等)
    • 多次plot繪制圖形
    • 多個坐標系顯示圖形
    • 知道折線圖的應用場景
  • 應用
    • 天氣的溫度變化顯示

1 折線圖繪制與保存圖片

為了更好地理解所有基礎繪圖功能,我們通過天氣溫度變化的繪圖來融合所有的基礎API使用

1.1 matplotlib.pyplot模塊

matplotlib.pytplot包含了一系列類似于matlab的畫圖函數。 它的函數作用于當前圖形(figure)的當前坐標系(axes)

import matplotlib.pyplot as plt

1.2 折線圖繪制與顯示

展現上海一周的天氣,比如從星期一到星期日的天氣溫度如下

# 1.創建畫布(容器層) 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 設置畫布屬性與圖片保存

plt.figure(figsize=(), dpi=)figsize:指定圖的長寬dpi:圖像的清晰度返回fig對象 plt.savefig(path) # 1.創建畫布,并設置畫布屬性 plt.figure(figsize=(20, 8), dpi=80) # 2.保存圖片到指定路徑 plt.savefig("test.png")
  • 注意:plt.show()會釋放figure資源,如果在顯示圖像之后保存圖片將只能保存空圖片。

2 完善原始折線圖1(輔助顯示層)

案例:顯示溫度變化狀況

需求:畫出某城市11點到12點1小時內每分鐘的溫度變化折線圖,溫度范圍在15度~18度

2.1 準備數據并畫出初始折線圖

# 畫出溫度變化圖# 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()

?

2.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])

如果沒有解決過中文問題的話,會顯示這個樣子:

?

2.3 中文顯示問題解決

1 在每次寫代碼之前,我們加入如下兩行代碼:

plt.rcParams['font.sans-serif']=['SimHei'] #用來正常顯示中文標簽 plt.rcParams['axes.unicode_minus'] = False #用來正常顯示負號

2 下載中文字體(黑體,看準系統版本)

  • 下載?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

    將文件內容修改為:

    font.family : sans-serif font.sans-serif : SimHei axes.unicode_minus : False

2.4 添加網格顯示

為了更加清楚地觀察圖形對應的值

plt.grid(True, linestyle='--', alpha=0.5)

2.5 添加描述信息

添加x軸、y軸描述信息及標題

plt.xlabel("時間") plt.ylabel("溫度") plt.title("中午11點0分到12點之間的溫度變化圖示")

3 完善原始折線圖2(圖像層)

3.1 多次plot

需求:再添加一個城市的溫度變化

收集到北京當天溫度變化情況,溫度在1度到3度。怎么去添加另一個在同一坐標系當中的不同圖形,其實很簡單只需要再次plot即可,但是需要區分線條:

# 增加北京的溫度數據 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")

?

我們仔細觀察,用到了兩個新的地方,一個是對于不同的折線展示效果,一個是添加圖例。

3.2 設置圖形風格

顏色字符風格字符
r 紅色- 實線
g 綠色- - 虛線
b 藍色-. 點劃線
w 白色: 點虛線
c 青色' ' 留空、空格
m 洋紅
y 黃色
k 黑色

完整代碼:

import random# 多次plot # 0.創建數據 x = range(60) y_shanghai = [random.uniform(15,18) for i in x] y_beijing = [random.uniform(-5, 5) for i in x]# 1.創建畫布 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 添加網格線 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 多個坐標系顯示-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. **fig_kw : All additional keyword arguments are passed to the figure() call.Returns: fig : 圖對象 ax : 設置標題等方法不同:set_xticksset_yticksset_xlabelset_ylabel

    關于axes子坐標系的更多方法:參考?https://matplotlib.org/stable/api/axes_api.html

  • 注意:plt.函數名()相當于面向過程的畫圖方法,axes.set_方法名()相當于面向對象的畫圖方法。

# 需求:畫出某城市11點到12點1小時內每分鐘的溫度變化折線圖,溫度范圍在15度~18度 # 多個axes # 0.構造數據 x = range(60) y_shanghai = [random.uniform(15, 18) for i in x] y_beijing = [random.uniform(1, 14) for i in x]# 1.創建畫布 # plt.figure(figsize=(20, 8)) 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, label="北京", linestyle="--", color="r") axes[0].plot(x, y_shanghai, label="上海") axes[1].plot(x, y_beijing, label="北京", linestyle="--", color="r")# 2.1 添加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 添加x,y軸描述和標題 # plt.xlabel("時間") # plt.ylabel("溫度") # plt.title("中午11點--12點溫度變化圖", fontsize=25) axes[0].set_xlabel("時間") axes[0].set_ylabel("溫度") axes[0].set_title("上海中午11點--12點溫度變化圖", fontsize=25) axes[1].set_xlabel("時間") axes[1].set_ylabel("溫度") axes[1].set_title("北京中午11點--12點溫度變化圖", fontsize=25)# 2.4 顯示圖例 # plt.legend(loc=0) axes[0].legend(loc=0) axes[1].legend(loc=0)# 3.顯示 plt.show()

5 折線圖的應用場景

  • 呈現公司產品(不同區域)每天活躍用戶數

  • 呈現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()

?

6 小結

  • 圖像保存【知道】
    • plt.savefig("路徑")
  • 添加x,y軸刻度【知道】
    • plt.xticks()
    • plt.yticks()
    • 注意:在傳遞進去的第一個參數必須是數字,不能是字符串,如果是字符串嗎,需要進行替換操作
  • 添加網格顯示【知道】
    • plt.grid(linestyle="--", alpha=0.5)
  • 添加描述信息【知道】
    • plt.xlabel()
    • plt.ylabel()
    • plt.title()
  • 多次plot【了解】
    • 直接進行添加就OK
  • 顯示圖例【知道】
    • plt.legend(loc="best")
    • 注意:一定要在plt.plot()里面設置一個label,如果不設置,沒法顯示
  • 多個坐標系顯示【了解】
    • plt.subplots(nrows=, ncols=)
  • 折線圖的應用【知道】
    • 1.應用于觀察數據的變化
    • 2.可是畫出一些數學函數圖像

總結

以上是生活随笔為你收集整理的Python可视化模块——Matplotlib(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。