本文索引:
- 雷達圖
- 三維圖
本文環境:Windows10 + jupyter notebook
一、雷達圖
【雷達圖】
- 雷達圖(Radar Chart),又可稱爲戴布拉圖、蜘蛛網圖(Spider Chart),可以很好刻畫出某些指標的橫向或縱向的對比關係。
- 雷達圖經常用於對多項指標的全面分析。比如:HR想要對比兩個應聘者的綜合素質,用雷達圖分別畫出來,就可以進行直觀的比較。
- python中用matplotlib模塊繪製雷達圖需要用到極座標系。
【雷達圖之極座標系】
- 在平面內取一個定點O,叫極點,引一條射線Ox,叫做極軸,再選一個長度單位和角度的正方向(通常取逆時針方向)。對於平面內任何一點M,用ρ表示線段OM的長度(有時也用r表示),表示從Ox到OM的角度,ρ叫做點M的極徑,叫做點M的極角,有序數對(ρ,)就叫做點M的極座標,這樣建立的座標系叫做極座標系。
- 通常情況下,M的極徑座標單位爲1(長度單位),極角座標單位爲°。
【雷達圖之polar()函數】
polar(theta,r,**kwargs)
主要參數:
- theta:指極角。
- r:指極徑。
import numpy as np
import matplotlib.pyplot as plt
plt.polar(0.25*np.pi,20,'ro',lw=2)
plt.ylim(0,50) # 設置極軸的上下限
plt.show()
這裏:
0.25*np.pi = 45°:極角
20:極徑
‘ro’:繪極座標形狀爲紅色圓點
lw = 2:極座標圖形寬度爲2
- 如果繪製多個極角和極軸時:
import numpy as np
import matplotlib.pyplot as plt
theta = np.array([0.25,0.5,0.75,1,1.25,1.5,1.75,2])
r = [75,60,50,70,50,85,45,70]
plt.polar(theta*np.pi,r,'ro',lw = 2)
plt.ylim(0,100)
plt.show()
theta:定義了一個ndarray數組存儲多個數據
r:定義了一個數組存放極軸的長度,也叫極徑
- 則在途中繪製出多個點(0.25*π,75),(0.5*π,60),(0.75*π,50),(1.0*π,70)等。
- 繪製完極座標點後,把每個點用線連起來,就是雷達圖了。
- 只需要把圖形繪製樣式修改爲‘ro-’即可,'ro-'中'-'表示極座標點之間的連線。
此時得到圖形是這樣的:
但是此時曲線並未閉合?
- 閉合曲線:多構造一個極座標點,和第一個點重疊
import numpy as np
import matplotlib.pyplot as plt
theta = np.array([0.25,0.5,0.75,1,1.25,1.5,1.75,2,0.25])
r = [75,60,50,70,50,85,45,70,75]
plt.polar(theta*np.pi,r,'ro-',lw = 2)
plt.ylim(0,100)
plt.show()
運行結果:
- fill()函數填充雷達圖
import numpy as np
import matplotlib.pyplot as plt
theta = np.array([0.25,0.5,0.75,1,1.25,1.5,1.75,2,0.25])
r = [75,60,50,70,50,85,45,70,75]
plt.polar(theta*np.pi,r,'ro-',lw = 2)
plt.fill(theta*np.pi,r,facecolor='r',alpha=0.25) # 填充
plt.ylim(0,100)
plt.show()
運行結果:
二、三維圖
【三維圖概述】
- matplotlib支持一些基礎的三維圖表繪製,比如曲面圖、散點圖和柱狀圖,需要使用mpl_toolkits模塊。
- 如果要繪製三維圖形,首先需要使用以下的語句導入相應的對象:
from mpl_toolkits.mplot3d import Axes3D
- 然後使用下面的兩種方式之一聲明要創建三維圖:
ax = fig.gca(projection = '3d')
ax = plt.subplot(111,projection = '3d')
- 接下來就可以使用ax的plot()方法繪製三維曲線、plot_surface()方法繪製三維曲面、scatter()方法繪製三維散點圖或bar3d()方法繪製三維柱狀圖了。
【 三維曲面繪製方法:p3d.Axes3D.plot_surface() 】
- 在繪製三維圖形時,至少需要指定x、y三個座標軸的數據,然後再根據不同的圖形指定額外的參數設置圖形的屬性。
plot_surface(X,Y,Z,*args,**kwargs)
- 常用參數:
- rstride和cstride分別控制x和y兩個方向的步長,這決定了曲面上每個面片的大小;
- color用來指定面片的顏色;
- cmap用來指定面片的顏色映射表。
【三維散點圖繪製方法:p3d.Axes3D.scatter() 】
p3d.Axes3D.scatter(xs,ys,zs = 0,zdir = 'z',s = 20,c = None,depthshade = True,
*args,**kwargs)
- 常用參數:
- xs、ys、zs分別用來指定散點符號的x、y、z座標,如果同時爲標量則指定一個三點符號的座標,如果同時爲等長數組則指定一系列散點符號的座標。
- s用來指定散點符號的大小,可以是標量或與xs等長的數組;
【三維柱狀圖繪製方法:p3d.Axes3D.bar3d()】
p3d.Axes3D.bar3d(x,y,z,dx,dy,dz,color = None,zsort = 'average',*args,**kwargs)
- 常用參數:
- x、y、z分別用來指定每個柱底面的座標,如果這三個參數都是標量則指定一個柱的地面座標,如果是三個等長的數組則指定多個柱的底面座標;
- dx、dy、dz分別用來是定柱在三個座標軸上的跨度,即x方向的寬度,y方向的厚度和z方向的高度;
- color用來指定柱的表面顏色。
三維曲線圖實戰:根據測試數據x、y、z,然後繪製三維曲線,並設置圖例字號
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.gca(projection = '3d')
#測試數據
theta = np.linspace(-4*np.pi,4*np.pi,100)
z = np.linspace(-4,4,100)*0.3
r = z**4 + 1
x = r*np.sin(theta)
y = r*np.cos(theta)
ax.plot(x,y,z,'b^-',label = '3D Picture Test')
mpl.rcParams['legend.fontsize'] = 10
ax.legend()
plt.show()
三維柱狀圖實戰:生成測試數據,繪製三維柱狀圖,設置每個柱的顏色隨機
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d
x = np.random.randint(0,40,10)
y = np.random.randint(0,40,10)
z = 80*abs(np.sin(x + y))
ax = plt.subplot(projection = '3d')
for xx,yy,zz in zip(x,y,z):
color = np.random.random(3)
ax.bar3d(xx,yy,0,dx = 1,dy = 1,dz = zz,color = color)
ax.set_xlabel('X')
ax.set_xlabel('Y')
ax.set_xlabel('Z')
plt.show()
Python數據可視化部分四個小節已全部更新完畢,神知道我是在被隔離期間完成這最後一篇的筆記的,接下來要開始機器學習部分的實戰啦,大家一起加油,武漢加油,中國加油!!!