Python-matplotlib-入門教程(一)-基礎圖表繪製
0.摘要
本教程主要介紹使用python第三方庫matplotlib繪製各種統計圖表,教程從簡單到複雜,逐步遞進。
本章主要介紹常見圖表的繪製方法,並以儘可能簡單的方式實現,主要以突出函式功能為目的,防止讀者被複雜的引數分散了注意力。鑑於函式的引數的相似性,讀者只需要知道引數的含義並結合help命令即可掌握。常用引數將在後續章節中進行統一介紹,幫助讀者記憶。
附官網教程連結:https://matplotlib.org/
1.線形圖
首先繪製一條y = x 的直線,利用numpy.linspace()可以在給定區間上生成一定數量的等距點:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-10,10,200)
y = x
plt.plot(x,y)
plt.show() #顯示影象
x在[-10,10]上均勻地取了200個點,點的數量直接影響曲線的精確度和影象的圓滑程度,這裡用y = x ** 2進行舉例:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-10,10,5)
y = x ** 2
plt.plot(x,y)
plt.show()
當點陣密度不足的時候,影象會出現明顯的稜角,從而產生失真現象。
多次呼叫plt.plot()方法即可在一張圖表中繪製出多條曲線。
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3,3,100)
y1 = x ** 2 - 1
y2 = x + 1
plt.plot(x,y1)
plt.plot(x,y2)
plt.show()
2.條形圖
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
y = np.random.randint(1,10,10)
plt.bar(x,y)
plt.show()
與線形圖一樣,多次呼叫plt.bar()可以在一張圖中繪製出多組資料:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(10)
y1 = np.random.randint(1,10,10)
y2 = np.random.randint(-10,-1,10)
plt.bar(x,y1)
plt.bar(x,y2)
plt.show()
需要注意的是,如果y1,y2共用x軸,那麼就可能出現重合的情況:
這種情況可以通過設定不同的x軸進行分離:
import matplotlib.pyplot as plt
import numpy as np
x1 = np.arange(0,30,3)
x2 = np.arange(1,30,3)
y1 = np.random.randint(1,10,10)
y2 = np.random.randint(1,10,10)
plt.bar(x1,y1)
plt.bar(x2,y2)
plt.show()
3.直方圖
先介紹一下直方圖與條形圖的區別:(內容轉自:https://blog.csdn.net/hohaizx/article/details/79101322)
首先需要區分清楚概念:直方圖和條形圖。
- 條形圖:條形圖用長條形表示每一個類別,長條形的長度表示類別的頻數,寬度表示表示類別。
- 直方圖:直方圖是一種統計報告圖,形式上也是一個個的長條形,但是直方圖用長條形的面積表示頻數,所以長條形的高度表示頻陣列距頻陣列距,寬度表示組距,其長度和寬度均有意義。當寬度相同時,一般就用長條形長度表示頻數。
直方圖一般用來描述等距資料,柱狀圖一般用來描述名稱(類別)資料或順序資料。直觀上,直方圖各個長條形是銜接在一起的,表示資料間的數學關係;條形圖各長條形之間留有空隙,區分不同的類。
區別 | 頻數分佈直方圖 | 條形圖 |
---|---|---|
橫軸上的資料 | 連續的,是一個範圍 | 孤立的,代表一個類別 |
長條形之間 | 沒有空隙 | 有空隙 |
頻數的表示 | 一般用長條形面積表示;當寬度相同時,用長度表示 | 長條形的長度 |
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randn(1000)
plt.hist(data)
plt.show()
4.散點圖
import matplotlib.pyplot as plt
import random
x = [random.randint(1,100) for _ in range(100)]
y = [random.randint(1,100) for _ in range(100)]
plt.scatter(x, y)
plt.show()
同樣,多組資料亦可以同時繪製在一張圖中:
import matplotlib.pyplot as plt
import random
x1 = [random.randint(1,50) for _ in range(100)]
y1 = [random.randint(1,50) for _ in range(100)]
x2 = [random.randint(50,100) for _ in range(100)]
y2 = [random.randint(50,100) for _ in range(100)]
plt.scatter(x1, y1)
plt.scatter(x2, y2)
plt.show()
5.餅狀圖
matplotlib會根據資料自動計算比例,這裡只需要給出資料列表即可:
import matplotlib.pyplot as plt
share = [256, 512, 32, 1024, 512]
plt.pie(share)
plt.show()
由於餅圖比較特殊,這裡詳細介紹一下它的引數:
import matplotlib.pyplot as plt
labels = ['Java', 'Python', 'JavaScript', 'C++', 'C#', 'PHP', 'Perl']
users = [68, 46, 38, 31, 27, 15, 14 ]
explode = [0, 0.3, 0, 0, 0, 0, 0] # 設定Python突出顯示
colors = ['b', 'c', 'g', 'grey', 'm', 'r', 'y'] #設定每一塊的顏色
plt.axes(aspect=1) # 設定餅圖形狀為圓形,預設為橢圓形
plt.pie(x=users, labels=labels, explode=explode, autopct='%3.1f %%',colors=colors,
shadow=True, labeldistance=1.1, startangle=0, pctdistance=0.6)
plt.show()
autopct:設定每一塊百分比資料的顯示格式;
labeldistance:設定label的顯示位置,0代表位於圓心,1代表位於邊線;
startangle:起始的繪圖角度;
pctdistance:百分比的形式位置。
6. 等高線圖
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3, 3, 101)
y = np.linspace(-3, 3, 101)
#構建二維座標點
X, Y = np.meshgrid(x, y)
height = (2 * np.pi) * np.exp((-1)/2 * (X ** 2 + Y ** 2)) + np.abs(X) + np.abs(Y)
#為等高線填充顏色
plt.contourf(X, Y, height)
# 繪製等高線
C = plt.contour(X, Y, height)
# 新增等高線標註
plt.clabel(C, inline=True, fontsize=16)
plt.show()
7.立體(3D)資料圖
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
x = np.linspace(-3, 3, 1001)
y = np.linspace(-3, 3, 1001)
X, Y = np.meshgrid(x, y)
Z = (2 * np.pi) * np.exp((-1)/2 * (X ** 2 + Y ** 2))
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_surface(X, Y, Z,cmap=plt.get_cmap('rainbow'))
plt.show()
8.二維矩陣以灰度影象顯示
import matplotlib.pyplot as plt
data = [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 18, 18, 18, 126, 136, 175, 26, 166, 255, 247, 127, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 30, 36, 94, 154, 170, 253, 253, 253, 253, 253, 225, 172, 253, 242, 195, 64, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 49, 238, 253, 253, 253, 253, 253, 253, 253, 253, 251, 93, 82, 82, 56, 39, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 18, 219, 253, 253, 253, 253, 253, 198, 182, 247, 241, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 80, 156, 107, 253, 253, 205, 11, 0, 43, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 1, 154, 253, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 253, 190, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 190, 253, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 241, 225, 160, 108, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 240, 253, 253, 119, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 186, 253, 253, 150, 27, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 93, 252, 253, 187, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, 253, 249, 64, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 46, 130, 183, 253, 253, 207, 2, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 148, 229, 253, 253, 253, 250, 182, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 114, 221, 253, 253, 253, 253, 201, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 23, 66, 213, 253, 253, 253, 253, 198, 81, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 18, 171, 219, 253, 253, 253, 253, 195, 80, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 55, 172, 226, 253, 253, 253, 253, 244, 133, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 136, 253, 253, 253, 212, 135, 132, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
plt.imshow(data)
plt.show()
相關文章
- Metal入門教程(一)圖片繪製
- OSG入門——繪製地球雲圖
- Shader 繪製基礎圖形
- CoreText 入門(一) 文字繪製
- Nestjs入門教程【一】基礎概念JS
- Python Django基礎教程(一)(入門)PythonDjango
- SQLite基礎入門教程SQLite
- 【Android繪圖】繪圖之基礎篇(一)Android繪圖
- C#快速入門教程(26)—— 繪圖C#繪圖
- CDR服裝設計基礎繪製教程-衛衣款式圖正面
- Webpack4系列教程(一) 基礎入門Web
- [WebGL入門]三,3D繪圖的基礎知識Web3D繪圖
- 使用 Flutter 繪製圖表(一)柱狀圖?Flutter
- WPF基礎:在Canvas上繪製圖形Canvas
- 圖論入門基礎圖論
- Python入門基礎教程(兒童版) [分享一本入門級教程]Python
- Flutter自定義繪製(1)- 繪製基礎Flutter
- ECharts 餅圖繪製教程Echarts
- gojs 流程圖框架-基礎繪圖(一)GoJS流程圖框架繪圖
- 視覺化圖表教程:業務資料地圖的繪製視覺化地圖
- Arduino基礎入門套件教程PDFUI套件
- Python Flask基礎教程(入門)PythonFlask
- ROS基礎入門——實操教程ROS
- [適合小白的Linu基礎入門教程一
- TypeScript 基礎入門(一)TypeScript
- rabbitmq(一)-基礎入門MQ
- MyBatis入門基礎(一)MyBatis
- clojure基礎入門(一)
- 【WEB基礎】HTML & CSS 基礎入門(8)表單WebHTMLCSS
- Mac新手入門,OmniGraffle繪製流程圖方法分享Mac流程圖
- 繪製圖表 go-echartsGoEcharts
- Android入門教程 | Fragment 基礎概念AndroidFragment
- Oracle學習快速入門基礎教程Oracle
- 前端圖表外掛ECharts入門教程前端Echarts
- Xamarin圖表開發基礎教程(1)
- Android 繪圖基礎Android繪圖
- Matplotlib繪圖基礎繪圖
- 【D3.js 入門系列一】從零開始繪製一個柱形圖JS