我終於懂得如何使用matplotlib進行畫圖


一 前言

本篇文章帶大家快速入門如何使用matplotlib畫出精美數學的圖片;看完本篇文章你將獲得熟悉並簡單使用matplotlib工具,會畫基本得折現圖,散點圖,sin,cos圖,一張畫布畫出多圖等. 當然matplotlib得功能遠不止這些,讀者可以參照官網進行學習。

二 圖像得組成

下面張圖片來自matplotlib官網,簡單說明一下圖片得組成;

  1. figure:畫布,一張圖片得整體輪廓
  2. Axes:數軸,一張畫布上可以畫多張圖片
  3. axis:坐標軸,通常得x軸,y軸等
  4. tick:刻度,坐標軸上得刻度
  5. title: 圖片得標題
  6. legend:圖例
  7. grid: 網格
  8. label:標簽說明

三 畫折現圖

畫圖之前要導入matplotlib庫和numpy庫;

3.1 簡單折線圖

畫一張簡單得折線圖,輸入得數值只有y變量,並且設置x,y軸得標簽和字體大小,詳細說明看代碼清單

import matplotlib.pyplot as plot
import numpy as np
# 着線圖數據
line = [1,2,6,8,9,15,23,29,35]

# 指定線條粗細
plot.plot(line,linewidth=2)
# 設置標題
plot.title("zszxz line ",fontsize=12)
# 設置x軸
plot.xlabel("x",fontsize=12)
# 設置y軸
plot.ylabel("y",fontsize=12)
# 顯示
plot.show()

圖片顯示結果

3.2 齊全的折線圖

下面得圖片畫得是帶有x,y數值得折現圖,能夠自定義x,y值,實現數學上的數字換圖片效果; 描繪坐標就是(1,2),(2,4),(6,12),(8,16),(9,18);y的值正好是x的2倍(y = 2x);也可以發現與前面一張圖片的不同之處就是初始值不是(0,0)開始,而是(1,2);

import matplotlib.pyplot as plot
import numpy as np
# 着線圖數據
line1 = [1,2,6,8,9]
line2 = [2,4,12,16,18]
# 指定線條粗細
plot.plot(line1, line2,linewidth=2)
# 設置標題
plot.title("zszxz line ",fontsize=12)
# 設置x軸
plot.xlabel("x",fontsize=12)
# 設置y軸
plot.ylabel("y",fontsize=12)
# 顯示
plot.show()

圖片結果

3.3 銷售折現圖

模擬一次水果每個月份的銷量,知識追尋者舉例2個水果,分別是蘋果,香蕉,然后用折現圖顯示每個月份的銷量;代碼清單將設置圖例信息,限制x軸的范圍(1~12月),設置x軸刻度;

import matplotlib.pyplot as plot
import numpy as np
# 折線圖數據
line1 = [1,2,6,8,9,25,41,65,32,14,45,100]
line2 = [2,4,12,16,18,45,3,4,55,67,78,22]
# 線條1
plot.plot(line1,color='red',label="apple",linewidth=2)
# 線條2
plot.plot(line2,color='blue',label="banana",linewidth=2)
# 設置x軸
plot.xlabel("month",fontsize=12)
# 設置y軸
plot.ylabel("sales",fontsize=12)
# 設置標題
plot.title("zszxz prodcut sale ",fontsize=12)
# 添加圖例
plot.legend()
# 設置x范圍
plot.xlim(1,12)
# 設置 x 刻度
x_ticks = np.arange(1, 13, 1)
plot.xticks(x_ticks)
# 顯示
plot.show()

執行結果

四 畫散點圖

4.1 簡單的散點圖

我們將以簡單的(x,y)坐標匹配,然后在畫布上畫出簡單的散點圖;

import matplotlib.pyplot as plot
import numpy as np
x = [1,3,5,7,9]
y = [2,4,6,8,10]
# 散點
plot.scatter(x,y)
# 設置標題
plot.title("zszxz scatter",fontsize=12)
# 設置x軸
plot.xlabel("x",fontsize=12)
# 設置y軸
plot.ylabel("y",fontsize=12)
# 顯示
plot.show()

執行結果如下,可以看見基本實現了散點圖功能不過不是很好看;

4.2 計算型散點圖

實際應用中不可能要我們手動輸入2個列表進行描繪散點圖,一般都包含一種數學關系,我們用計算的方式獲得散點圖;

import matplotlib.pyplot as plot
import numpy as np
x_val = list(range(1,50))
# y的值是x的平方
y_val = [x**2 for x in x_val]
# 設置x軸
plot.xlabel("x",fontsize=12)
# 設置y軸
plot.ylabel("y",fontsize=12)
# 散點
plot.scatter(x_val,y_val,color='pink')
# 顯示
plot.show()

執行結果如下,修改顏色,數據集變多之后,明顯就好看了許多;

4.3 隨機數散點圖

這次我們將使用隨機數進行描繪圖片,並設置圖片散點顏色,標記屬性;marker 屬性默認是 o ,圓點,我們將其改成 * ; 更多marker配置配置可以參照官方文檔

import matplotlib.pyplot as plot
import numpy as np
# 500 個隨機數
n = 500
# 平均值為0,方差為1
X = np.random.normal(0,1,n)
Y = np.random.normal(0,1,n)

#plot.scatter(X,Y,color='green',alpha=0.7)
plot.scatter(X,Y,color='green',alpha=0.7,marker='*')
#設置網格線
#plot.grid(True)
plot.show()

執行結果如下,可以發現瞬間美觀了許多,當然根據不同的實際需求,畫出的圖片也不一樣。

五 畫正余弦

5.1正弦

知識追尋者將畫 一個 x 軸從-2Π 到 + 2 Π的 正弦圖,並且在區間進行1024個等分處理;

import matplotlib.pyplot as plot
import numpy as np
# -2Π 到 2 Π 1024 個等值
x = np.linspace(-np.pi*2, np.pi*2, 1024)
y = np.sin(x)
plot.plot(x, y,c='r')
# 設置x軸
plot.xlabel("x",fontsize=12)
# 設置y軸
plot.ylabel("y=sin(x)",fontsize=12)
# 設置標題
plot.title("zszxz sin",fontsize=12)
# 顯示
plot.show()

執行結果如下:

5.2 余弦

跟正弦類似,畫 一個 x 軸從-2Π 到 + 2 Π的 正弦圖,並且在區間進行1024個等分處理;

import matplotlib.pyplot as plot
import numpy as np
# -2Π 到 2 Π 1024 個等值
x = np.linspace(-np.pi*2, np.pi*2, 1024)
y = np.cos(x)
plot.plot(x, y,c='c')
# 設置x軸
plot.xlabel("x",fontsize=12)
# 設置y軸
plot.ylabel("y=cons(x)",fontsize=12)
# 設置標題
plot.title("zszxz cos",fontsize=12)
# 顯示
plot.show()

六 畫布多圖

知識追尋者將5章節的正弦,余弦整合,然后在一張畫布上畫出2張圖片;懂得這個方法之后,讀者可以在任意得一張畫布上畫出多張圖片;為了顯示更加好看,還設置了虛線(dashes)

import matplotlib.pyplot as plot
import numpy as np
# 創建畫布
plot.figure()
# 子圖1
plot.subplot(211)
x = np.linspace(-np.pi*2, np.pi*2, 1024)
sin_y = np.sin(x)
# 設置虛線
plot.plot(x, sin_y,dashes=[6, 3],c='m')
# 子圖2
plot.subplot(212)
con_y = np.cos(x)
plot.plot(x, con_y,dashes=[6, 2],c='r')
# 顯示
plot.show()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM