python必備庫 學習筆記 matplotlib

Matplotlib

Matplotlib介紹

  • Matplotlib專門用於開發2D圖表(也支持3D圖表),是一個畫二維圖表的python庫
  • Matplotlib以漸進、交互方式實現數據可視化,使用起來簡單

爲什麼要學習Matplotlib

  • Matplotlib能將數據進行可視化,更直觀的呈現,幫助理解數據,方便選擇更合適的分析方法
  • Matplotlib使數據更加客觀,更具有說服力

Matplotlib簡單實例

畫一條簡單直線
在這裏插入圖片描述
修改點的座標即可畫出折線圖
在這裏插入圖片描述

Matplotlib圖像結構

在這裏插入圖片描述

Matplotlib三層結構

容器層

容器層主要由Canvas(畫板)、Figure(畫布)、Axes(圖表)組成。

  • Canvas位於最底層的系統層,在繪圖的過程中充當畫板的角色,即放置畫布的工具,通常情況下,我們並不需要對Canvas特別的聲明,當我們需要在其他模塊調用Matplotlib模塊繪圖時,就需要聲明Canvas,相當於我們在自家畫畫不用強調畫板,出去寫真時卻需要帶一塊畫板
  • Figure是Canvas上方的第一層,也是需要用戶來操作的第一層,在繪圖的過程中充當畫布的角色。當我們對Figure大小、背景色彩進行設置的時候,就相當於選擇畫布大小、材質的過程。因此,每當我們繪圖時,寫的第一行就是創建Figure的代碼。
  • Axes是應用層的第二層,在繪圖的過程中相當於畫布上的繪圖區角色。一個Figure對象可以包含多個Axes對象,每個Axes都是一個獨立的座標系,繪圖過程中的所有圖像都是基於座標系繪製的。

輔助顯示層

輔助顯示層爲Axes內除根據數據畫出的圖像以外的內容,主要包括外觀(facecolor)、邊框線(spines)、座標軸(axis)、座標軸名稱(axis label)、座標軸刻度(tick)、座標軸刻度標籤(tick label)、網格線(grid)、圖例(legend)、標題(title)等。
該層的作用可使圖像更加直觀、更加容易理解,但對圖像沒有實質性的影響
在這裏插入圖片描述

圖像層

圖像層指的Axes內通過plot(折線圖)、hist(柱狀圖)、contour(輪廓圖)、bar(柱狀圖)、barbs、pie(餅圖)等函數繪製出的圖像。
在這裏插入圖片描述

總結

  • Canvas(畫板)位於最底層,用戶一般接觸不到
  • Figure(畫布)建立在Canvas之上
  • Axes(繪圖區)建立在Figure之上
  • 座標軸(axis)、圖例(legend)等輔助顯示層及圖像層都是建立在Axes之上

實例

定義多個figure畫多個圖像
在這裏插入圖片描述
在一個figure中畫多個圖像

折線圖與基礎繪圖功能

matplotlib.pyplot包含了一系列類似於matlab的畫圖函數,作用於當前圖形(figure)的當前座標系(axes)

折線圖繪製與保存圖片

  1. 繪製一個簡單的折線圖
    在這裏插入圖片描述
  2. 設置畫布屬性與圖片保存

設置圖片的大小與清晰度

  • plt.figure(figsize(a,b),dpi=)
    • figsize 設置圖形的大小,a 爲圖形的寬, b 爲圖形的高,單位爲英寸
    • dpi 爲設置圖形每英寸的點數
    • 該函數返回一個figure對象

保存圖片

  • plt.savefig(路徑與名字)

在這裏插入圖片描述
在這裏插入圖片描述
注意 plt.show()會釋放figure資源,如果在顯示圖像之後保存圖片只能保存空圖片

設置x、y軸

  • plt.xlim(*args,**kwargs)
    • 設置x軸顯示的刻度範圍
  • plt.ylim(*args,**kwargs)
    • 設置y軸顯示的刻度範圍

在這裏插入圖片描述

  • plt.xticks(x,**kwargs)
    • x : 要顯示的新刻度值
  • plt.yticks(y,**kwargs)
    • y : 要顯示的新刻度值
      在這裏插入圖片描述

中文亂碼問題

本意是顯示0點,1點等,亂碼就顯示如下
在這裏插入圖片描述
下載中文字體(黑體,看準系統版本)

  • 下載SimHei字體(其他支持中文顯示的字體也行)
  1. 安裝字體
  • windows和mac中,雙擊安裝

  • linux中,拷貝字體到/usr/share/fonts下

    sudo cp ~/SimHei.ttf /usr/share/fonts/SimHei.ttf
    
  1. 刪除matplotlib緩存字體
  • Mac
    • 刪除~/.matplotlib中的緩存文件
      cd ~/.matplotlib
      rm -r *
      
  • Linux
    • 刪除~/.cache/matplotlib中的緩存文件
      cd ~/.cache/matplotlib
      rm -r *
      
  1. 修改配置文件matplotlibrc
  • Mac
    • 修改配置文件matplotlibrc
    vi ~/.matplotlib/matplotlibrc
    
    • 將文件內容修改爲
    font.family		: sans-serif
    font.sans-serif		: SimHei
    axes.unicode	 : False
    
  • Linux
    • 修改配置文件matplotlibrc
    sudo find -name matplotlibrc
    
    • 返回結果
    ./.virtualenvs/ai/lib/python3.5/site-package/matplotlib/mpl-data/matplotlib
    
    • 將文件內容修改爲
    font.family		: sans-serif
    font.sans-serif		: SimHei
    axes.unicode	 : False
    

添加網格顯示

爲了更加清楚地觀察圖像對應地值
plt.grid(True,linestyle=‘–‘,alpha=0.5)

  • True:代表是否添加網格
  • linestyle:網格線的格式
  • alpha:透明度
    在這裏插入圖片描述

添加描述信息

  • plt.xlabel(str)
    • str : 要顯示的x軸名稱
  • plt.ylabel(str)
    • str : 要顯示的y軸名稱
  • plt.title(str)
    • str:圖片的標題
      在這裏插入圖片描述

在原圖上加一個圖層

一個圖就是一個plot,需要加圖層就是多定義一個plot
在這裏插入圖片描述
在圖層上添加說明
plt.plot(,label=str)

  • str:直線的說明

plt.legend(loc=‘lower left’)

  • loc:圖例顯示的位置
    在這裏插入圖片描述
    在這裏插入圖片描述

創建多個繪圖區

matplotlib.pyplot.subplots(nrows=1,ncols=1,**fig_kw)創建一個帶有多個axes(座標系/繪圖區)的圖

  • nrows:行數,默認是一行
  • ncols:列數,默認是一列

plt.函數名()相當於面向過程的畫圖方法,axes.set_函數名()相當於面向對象的畫圖方法

In

# 繪製0-12點的溫度變化圖
import matplotlib.pyplot as plt
#創建寬208英寸dpi爲80的畫布
figure,axes=plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=80)

x=[0,1,2,3,4,5,6,7,8,9,10,11]#時間 x
y=[2,3,2,2,2,4,5,8,9,9,12,15]#溫度 y
y1=[12,9,8,9,7,5,5,2,0,9,12,15]#溫度 y1

axes[0].plot(x,y,label='picture1') #繪製圖像1
axes[1].plot(x,y1,label='picture2') #繪製圖像2

axes[0].legend(loc='lower left') #顯示圖例
axes[1].legend(loc='lower left') #顯示圖例

#設置兩個軸顯示刻度
y_label=['{}℃'.format(i)for i in y]
x_label=['{}h'.format(i)for i in x]

#添加網格
axes[0].grid(True,linestyle='--',alpha=0.5)
axes[1].grid(True,linestyle='--',alpha=0.5)
#添加描述信息
axes[0].set_xlabel('time/h')
axes[0].set_ylabel('tempreture/℃')
axes[0].set_title('tempreture_change_picture')

axes[1].set_xlabel('time/h')
axes[1].set_ylabel('tempreture/℃')
axes[1].set_title('tempreture_change_picture')

axes[0].set_xticks(x,x_label)
axes[0].set_yticks(y,y_label)

axes[1].set_xticks(x,x_label)
axes[1].set_yticks(y1,y_label)

plt.show()

Out
在這裏插入圖片描述

繪製數學函數

畫圖之前先寫出y的表達式

import numpy as np
import math
x=np.linspace(-1,1,1000)
y=-1*x*x #表達式y

plt.figure(figsize=(20,8),dpi=80)#創建畫布
plt.plot(x,y) #繪製圖形
plt.grid() #添加網格
plt.show()

在這裏插入圖片描述

柱狀圖

  • 意義:能夠一眼看出各個數據的大小,方便統計和對比數據之間的差別
  • mayplotlib.pyplot.bar(x,width,align=‘center’,**kwargs) 繪製柱狀圖
  • 用途:比較多組數據之間的差別
    在這裏插入圖片描述
#繪製公司的第一月份和第一年的收入圖
x=['company A','company B','company C','company D']
y_month=[1200,2100,4100,3110]
y_year=[5810,5120,8040,7410]
plt.figure(figsize=(6,4),dpi=80)#創建畫布
plt.bar([0,1,2,3],y_month,width=0.2,label='first month income',
        color=['r']) #繪製圖形
plt.bar([0.2,1.2,2.2,3.2],y_year,width=0.2,
        label='first year income') #繪製圖形
plt.legend()

plt.xticks(range(4),x)
plt.title('company income table')
plt.grid() #添加網格
plt.show()

在這裏插入圖片描述

直方圖

  • 組數:在統計數據時,我們把數據按照不同的範圍分成幾個組,分成的組的個數稱爲組數
  • 組距:每一組兩個端點的差
  • 意義:直方圖展示數據的分佈
  • matplotlib.pyplot.hist(x,bins=None,normed=None,**kwargs)
    • x:畫圖的數據
    • bins:組數

x=[143,152,164,148,165,157,159,162,170,176,148,154,165,158,149,172,157,164,168,157]

plt.figure(figsize=(6,4),dpi=80)#創建畫布
plt.hist(x,11)
plt.title('table')#標題
plt.xticks(range(min(x),max(x),3))
plt.show()

在這裏插入圖片描述

散點圖

  • 意義:判斷變量之間是否存在數量關聯趨勢,展示數據分佈規律
  • matplotlib.pyplot.scatter() 繪製散點圖
  • 用途:探究不同變量之間的內在關係
    在這裏插入圖片描述

餅圖

  • matplotlib.pyplot.pie(x,labels=,autopct=,colors)
  • x:數量
  • labels:每部分名稱
  • autopct:佔比顯示指定%1.2f%%
  • colors:每部分顏色
name=['A','B','C','D','E','F']
count=[1250,900,850,749,1300,890]
plt.figure(figsize=(6,4),dpi=80)#創建畫布
plt.pie(count,labels=name,colors=['r','b','y','g','c','m'],autopct='%1.2f%%')
plt.title('table')#標題
#如果圖形不平整,加該行代碼
#plt.axis('equal')
plt.show()

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章