Python數據分析實戰【第三章】3.11-Matplotlib極座標圖【python】

1.創建極座標軸

s = pd.Series(np.arange(20))
theta=np.arange(0,2*np.pi,0.02)
print(s.head())
print(theta[:10])
# 創建數據

fig = plt.figure(figsize=(8,4))
ax1 = plt.subplot(121, projection = 'polar')
ax2 = plt.subplot(122)
# 創建極座標子圖
# 還可以寫:ax = fig.add_subplot(111,polar=True)

ax1.plot(theta,theta*3,linestyle = '--',lw=1)  
ax1.plot(s, linestyle = '--', marker = '.',lw=2)
ax2.plot(theta,theta*3,linestyle = '--',lw=1)
ax2.plot(s)
plt.grid()
# 創建極座標圖,參數1爲角度(弧度制),參數2爲value
# lw → 線寬
---------------------------------------------------------------------
0    0
1    1
2    2
3    3
4    4
dtype: int32
[ 0.    0.02  0.04  0.06  0.08  0.1   0.12  0.14  0.16  0.18]

在這裏插入圖片描述

2.極座標參數設置


theta=np.arange(0,2*np.pi,0.02)
plt.figure(figsize=(8,4))
ax1= plt.subplot(121, projection='polar')
ax2= plt.subplot(122, projection='polar')
ax1.plot(theta,theta/6,'--',lw=2)
ax2.plot(theta,theta/6,'--',lw=2)
# 創建極座標子圖ax

ax2.set_theta_direction(-1)
# set_theta_direction():座標軸正方向,默認逆時針

ax2.set_thetagrids(np.arange(0.0, 360.0, 90),['a','b','c','d'])
ax2.set_rgrids(np.arange(0.2,2,0.4))
# set_thetagrids():設置極座標角度網格線顯示及標籤 → 網格和標籤數量一致
# set_rgrids():設置極徑網格線顯示,其中參數必須是正數

ax2.set_theta_offset(np.pi/2)
# set_theta_offset():設置角度偏移,逆時針,弧度制

ax2.set_rlim(0.2,1.2)
ax2.set_rmax(2)
ax2.set_rticks(np.arange(0.1, 1.5, 0.2))
# set_rlim():設置顯示的極徑範圍
# set_rmax():設置顯示的極徑最大值
# set_rticks():設置極徑網格線的顯示範圍

在這裏插入圖片描述

3.雷達圖1 - 極座標的折線圖/填圖 - plt.plot()

plt.figure(figsize=(8,4))

ax1= plt.subplot(111, projection='polar')
ax1.set_title('radar map\n')  # 創建標題
ax1.set_rlim(0,12)

data1 = np.random.randint(1,10,10)
data2 = np.random.randint(1,10,10)
data3 = np.random.randint(1,10,10)
theta=np.arange(0,2*np.pi,2*np.pi/10)
# 創建數據

ax1.plot(theta,data1,'.--',label='data1')
ax1.fill(theta,data1,alpha=0.2)
ax1.plot(theta,data2,'.--',label='data2')
ax1.fill(theta,data2,alpha=0.2)
ax1.plot(theta,data3,'.--',label='data3')
ax1.fill(theta,data3,alpha=0.2)
# 繪製雷達線

在這裏插入圖片描述

4.雷達圖2 - 極座標的折線圖/填圖 - plt.polar()

# 首尾閉合

labels = np.array(['a','b','c','d','e','f']) # 標籤
dataLenth = 6 # 數據長度
data1 = np.random.randint(0,10,6) 
data2 = np.random.randint(0,10,6) # 數據

angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False) # 分割圓周長
data1 = np.concatenate((data1, [data1[0]])) # 閉合
data2 = np.concatenate((data2, [data2[0]])) # 閉合
angles = np.concatenate((angles, [angles[0]])) # 閉合

plt.polar(angles, data1, 'o-', linewidth=1) #做極座標系
plt.fill(angles, data1, alpha=0.25)# 填充
plt.polar(angles, data2, 'o-', linewidth=1) #做極座標系
plt.fill(angles, data2, alpha=0.25)# 填充

plt.thetagrids(angles * 180/np.pi, labels) # 設置網格、標籤
plt.ylim(0,10)  # polar的極值設置爲ylim

在這裏插入圖片描述

5.極軸圖 - 極座標的柱狀圖


plt.figure(figsize=(8,4))

ax1= plt.subplot(111, projection='polar')
ax1.set_title('radar map\n')  # 創建標題
ax1.set_rlim(0,12)

data = np.random.randint(1,10,10)
theta=np.arange(0,2*np.pi,2*np.pi/10)
# 創建數據

bar = ax1.bar(theta,data,alpha=0.5)
for r,bar in zip(data, bar):
    bar.set_facecolor(plt.cm.jet(r/10.))  # 設置顏色
plt.thetagrids(np.arange(0.0, 360.0, 90), []) # 設置網格、標籤(這裏是空標籤,則不顯示內容)

在這裏插入圖片描述

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