电竞比分网-中国电竞赛事及体育赛事平台

分享

Python之?dāng)?shù)據(jù)分析(三維立體圖像、極坐標(biāo)系、半對(duì)數(shù)坐標(biāo))

 老三的休閑書屋 2021-04-14

寫在前面:

import numpy as np
import matplotlib.pylab as mp
因此文章中的np就代表numpy庫,mp就代表pylab繪圖庫

一、三維立體圖像

  • 導(dǎo)入類:from mpl_toolkits.mplot3d import axes3d

  • 獲得三維坐標(biāo)軸:ax = mp.gca(projection='3d’)

1、三維線框

  • 格式:ax.plot_wireframe(x, y, z, rstride=行距, cstrid=列距, linewidth=線寬, color=顏色)

  • 測試代碼:

import numpy as npimport matplotlib.pylab as mpfrom mpl_toolkits.mplot3d import axes3d n = 1000# 柵格化:兩組1000個(gè)-3到3的一維數(shù)組成x和y,會(huì)形成1000*1000個(gè)焦點(diǎn)的二維數(shù)組x, y = np.meshgrid(np.linspace(-3, 3, n), np.linspace(-3, 3, n))# uniform:均勻分布,每個(gè)隨機(jī)數(shù)概率一樣在0.5和1.0之內(nèi)產(chǎn)生n個(gè)隨機(jī)數(shù)y1 = (1 - x/n) * np.random.uniform(0.5, 1.0, n) # (1 - x/n)為了方便顯示y2 = (1 - x/n) * np.random.uniform(0.5, 1.0, n)z = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2)# 換行做運(yùn)算需要用\隔開,exp是底數(shù)為x指數(shù)是-x**2 - y**2# 圖像屬性mp.figure('3D Wireframe')# 創(chuàng)建3D坐標(biāo)軸ax = mp.gca(projection='3d')mp.title('3D Wireframe', fontsize=20) # 圖像標(biāo)題# X、Y、Z坐標(biāo)軸文本ax.set_xlabel('X', fontsize=14)ax.set_ylabel('Y', fontsize=14)ax.set_zlabel('Z', fontsize=14)mp.tick_params(labelsize=10) # 刻度標(biāo)簽大小# 繪制三維線框圖像ax.plot_wireframe(x, y, z, rstride=30, cstride=30, linewidth=0.5, color='orangered')mp.show()
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

  • 33

  • 34

  • 35

  • 36

  • 37

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

  • 33

  • 34

  • 35

  • 36

  • 37

  • 測試效果
    11

2、三維曲面

  • 格式:ax.plot_surface(x, y, z, rstride=行距, cstrid=列距, cmap=顏色映射)

  • 測試代碼:

import numpy as npimport matplotlib.pylab as mpfrom mpl_toolkits.mplot3d import axes3d

n = 1000# 柵格化:兩組1000個(gè)-3到3的一維數(shù)組成x和y,會(huì)形成1000*1000個(gè)焦點(diǎn)的二維數(shù)組x, y = np.meshgrid(np.linspace(-3, 3, n),   np.linspace(-3, 3, n))# uniform:均勻分布,在0.5和1.0之內(nèi)產(chǎn)生n個(gè)隨機(jī)數(shù)y1 = (1 - x/n) * np.random.uniform(0.5, 1.0, n)  # (1 - x/n)為了方便顯示y2 = (1 - x/n) * np.random.uniform(0.5, 1.0, n)z = (1 - x/2 + x**5 + y**3) *     np.exp(-x**2 - y**2)# 換行做運(yùn)算需要用\隔開,exp是底數(shù)為x指數(shù)是-x**2 - y**2# 圖像屬性mp.figure('3D Surface')# 創(chuàng)建3D坐標(biāo)軸ax = mp.gca(projection='3d')mp.title('3D Surface', fontsize=20)  # 圖像標(biāo)題# X、Y、Z坐標(biāo)軸文本ax.set_xlabel('X', fontsize=14)ax.set_ylabel('Y', fontsize=14)ax.set_zlabel('Z', fontsize=14)mp.tick_params(labelsize=10)  # 刻度標(biāo)簽大小# 繪制三維線框圖像:行距列距越小,畫的圖越密集ax.plot_surface(x, y, z, rstride=10, cstride=10, cmap='jet')mp.show()123456789101112131415161718192021222324252627282930313233343536123456789101112131415161718192021222324252627282930313233343536
  • 測試效果:
    22

3、三維散點(diǎn)

  • 格式:ax.scatter(x, y, z, s=大小, c=顏色, marker=點(diǎn)型)

  • 測試代碼:

import numpy as npimport matplotlib.pylab as mpfrom mpl_toolkits.mplot3d import axes3d# 獲得1000個(gè)使用隨機(jī)作為服從正態(tài)分布的數(shù)據(jù)樣本(數(shù)組)n = 1000x = np.random.normal(0, 1, n) # 一參為標(biāo)準(zhǔn)差,二參為分布平坦性(越大越分散,越小越集中),三參為點(diǎn)的個(gè)數(shù)y = np.random.normal(0, 1, n)z = np.random.normal(0, 1, n)d = np.sqrt(x ** 2 + y ** 2 + z ** 2) # 根號(hào)下 x平方加y平方 作為點(diǎn)到正態(tài)中心的距離# 繪制圖像mp.figure('Scatter 3D')ax = mp.gca(projection='3d')mp.title('Scatter 3D', fontsize=20) # 圖像標(biāo)題ax.set_xlabel('X', fontsize=14) # X、Y刻度顯示的文本ax.set_ylabel('Y', fontsize=14)ax.set_zlabel('Z', fontsize=14)mp.tick_params(labelsize=10) # 刻度標(biāo)簽大小ax.scatter(x, y, z, s=60, c=d, cmap='jet_r', alpha=0.5, marker='*') # marker常用D,*,s,默認(rèn)圓點(diǎn)omp.show()
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 測試效果:
    33

二、極坐標(biāo)系

1、格式
ax = mp.gca(projection='polar’)
mp.plot…
mp.scatter…
x、y分別對(duì)應(yīng)極角、極徑

2、測試代碼

import numpy as npimport matplotlib.pylab as mp

t = np.linspace(0, 2 * np.pi, 1001)  # 極角# 螺旋線r_spiral = 0.8 * t  # 螺旋線,極徑與極角是0.8倍的關(guān)系# 玫瑰線r_rose = 5 * np.sin(6 * t)# 繪制圖像mp.figure('Polar', facecolor='lightgray')ax = mp.gca(projection='polar')mp.title('Polar', fontsize=20)  # 圖像標(biāo)題# 坐標(biāo)文本:極角,極徑ax.set_xlabel(r'$\theta$', fontsize=14)ax.set_ylabel(r'$\rho$', fontsize=14)mp.grid(linestyle=':')# 螺旋線mp.plot(t, r_spiral, c='dodgerblue', label=r'$\rho=0.8\theta$')# 玫瑰線mp.plot(t, r_rose, c='red', label=r'$\rho=5sin(6\theta)$')mp.tick_params(labelsize=10)  # 刻度標(biāo)簽大小mp.legend()mp.show()1234567891011121314151617181920212223242526272812345678910111213141516171819202122232425262728

3、測試效果
44

三、半對(duì)數(shù)坐標(biāo)

1、格式
mp.semilogy(…參數(shù)與mp.plot一樣)
mp.semilogx()

2、測試代碼

import numpy as npimport matplotlib.pylab as mp y = np.array([1, 10, 100, 1000, 100, 10, 1]) # y坐標(biāo)序列# 繪制圖像mp.figure('Normal & Log', facecolor='lightgray')mp.subplot(2, 1, 1) # 創(chuàng)建位置在2行1列的子圖# 普通plotmp.title('Normal', fontsize=16) # 圖像標(biāo)題mp.ylabel('Y', fontsize=12)# 刻度定位:x方向ax = mp.gca()ax.xaxis.set_major_locator(mp.MultipleLocator(1) # 多點(diǎn)定位器主刻度)ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1) # 多點(diǎn)定位器次刻度)# y方向ax.yaxis.set_major_locator(mp.MultipleLocator(250) # 多點(diǎn)定位器主刻度)ax.yaxis.set_minor_locator(mp.MultipleLocator(50) # 多點(diǎn)定位器次刻度)# 設(shè)置主刻度網(wǎng)格線mp.grid(which='major', axis='both', linewidth=0.75, linestyle='-', color='lightgray')# 設(shè)置次刻度網(wǎng)格線mp.grid(which='minor', axis='both', linewidth=0.25, linestyle='-', color='lightgray')mp.plot(y, 'o-', c='dodgerblue', label='plot')mp.legend()mp.subplot(2, 1, 2) # 創(chuàng)建位置在2行1列的子圖# 對(duì)數(shù)plot坐標(biāo)mp.title('Log', fontsize=16) # 圖像標(biāo)題mp.xlabel('X', fontsize=12)mp.ylabel('Y', fontsize=12)# 刻度定位:x方向ax = mp.gca()ax.xaxis.set_major_locator(mp.MultipleLocator(1) # 多點(diǎn)定位器主刻度)ax.xaxis.set_minor_locator(mp.MultipleLocator(0.1) # 多點(diǎn)定位器次刻度)# y方向:按照缺省來自動(dòng)設(shè)置# 設(shè)置主刻度網(wǎng)格線mp.grid(which='major', axis='both', linewidth=0.75, linestyle='-', color='lightgray')# 設(shè)置次刻度網(wǎng)格線mp.grid(which='minor', axis='both', linewidth=0.25, linestyle='-', color='lightgray')mp.semilogy(y, 'o-', c='orangered', label='semilog')mp.legend()mp.tight_layout()mp.show()
  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

  • 33

  • 34

  • 35

  • 36

  • 37

  • 38

  • 39

  • 40

  • 41

  • 42

  • 43

  • 44

  • 45

  • 46

  • 47

  • 48

  • 49

  • 50

  • 51

  • 52

  • 53

  • 54

  • 55

  • 56

  • 57

  • 58

  • 59

  • 60

  • 61

  • 62

  • 63

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

  • 11

  • 12

  • 13

  • 14

  • 15

  • 16

  • 17

  • 18

  • 19

  • 20

  • 21

  • 22

  • 23

  • 24

  • 25

  • 26

  • 27

  • 28

  • 29

  • 30

  • 31

  • 32

  • 33

  • 34

  • 35

  • 36

  • 37

  • 38

  • 39

  • 40

  • 41

  • 42

  • 43

  • 44

  • 45

  • 46

  • 47

  • 48

  • 49

  • 50

  • 51

  • 52

  • 53

  • 54

  • 55

  • 56

  • 57

  • 58

  • 59

  • 60

  • 61

  • 62

  • 63

3、測試效果
55

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多