Python數據可視化筆記04--雷達圖、三維圖實戰

Python數據可視化筆記01--Matplotlib基礎

Python數據可視化筆記02--折線圖、散點圖實戰

Python數據可視化筆記03--柱狀圖、餅狀圖實戰

本文索引:

  1. 雷達圖
  2. 三維圖

本文環境:Windows10 + jupyter notebook

一、雷達圖

【雷達圖】

  • 雷達圖(Radar Chart),又可稱爲戴布拉圖、蜘蛛網圖(Spider Chart),可以很好刻畫出某些指標的橫向或縱向的對比關係。
  • 雷達圖經常用於對多項指標的全面分析。比如:HR想要對比兩個應聘者的綜合素質,用雷達圖分別畫出來,就可以進行直觀的比較。
  • python中用matplotlib模塊繪製雷達圖需要用到極座標系。

【雷達圖之極座標系】

  • 在平面內取一個定點O,叫極點,引一條射線Ox,叫做極軸,再選一個長度單位和角度的正方向(通常取逆時針方向)。對於平面內任何一點M,用ρ表示線段OM的長度(有時也用r表示),\Theta表示從Ox到OM的角度,ρ叫做點M的極徑\Theta叫做點M的極角,有序數對(ρ,\Theta)就叫做點M的極座標,這樣建立的座標系叫做極座標系
  • 通常情況下,M的極徑座標單位爲1(長度單位),極角座標單位爲°。

【雷達圖之polar()函數】

polar(theta,r,**kwargs)

主要參數:

  • theta:指極角\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數據可視化部分四個小節已全部更新完畢,神知道我是在被隔離期間完成這最後一篇的筆記的,接下來要開始機器學習部分的實戰啦,大家一起加油,武漢加油,中國加油!!!

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