1.匯入資料庫
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate
2.匯入資料
path=r'path'
data=pd.read_excel(path,sheet_name='雷達圖',index_col=0)
data
展示資料:
290m | 312m | |
---|---|---|
0° | 62.6 | 54.5 |
45° | 61.6 | 54.6 |
90° | 63.0 | 54.5 |
135° | 60.6 | 53.9 |
180° | 63.2 | 54.8 |
225° | 60.6 | 53.9 |
270° | 63.4 | 54.5 |
315° | 61.6 | 54.6 |
360° | 62.6 | 54.5 |
3.圖紙設定
plt.rcParams['savefig.dpi'] = 300 # 圖片畫素
plt.rcParams['figure.dpi'] = 120 # 解析度
plt.rcParams['font.sans-serif']=['SimHei'] #顯示中文
plt.rcParams['axes.unicode_minus']=False #顯示負號
4.劃分角度
n=len(data.index)
theta=np.linspace(0,2*np.pi,n,endpoint=True) #獲取8個方向的角度值
R1=data['290m']/data['290m'].min()
R2=data['312m']/data['312m'].min()
5.構造平滑曲線函式
x_new=np.linspace(theta[0],theta[8],100)
f=interpolate.interp1d(theta,R1,kind='slinear')
y_smooth=f(x_new)
f1=interpolate.interp1d(theta,R2,kind='slinear')
y_smooth1=f1(x_new)
6.設定不同方向
labels=list(['0','45°','90°','135°','180°','225°','270°','315°'])
7.繪圖
fig,ax=plt.subplots(subplot_kw={'projection': 'polar'})
ax.plot(theta,R1,'o',color='blue',markersize=8,fillstyle='none',label='290m')
ax.plot(theta,R2,'D',color='orange',markersize=6,fillstyle='none',label='312m')
ax.plot(x_new,y_smooth,color='blue')
ax.plot(x_new,y_smooth1,color='orange')
ax.set_rmin(0.95) #設定刻度範圍最小值
ax.set_rmax(1.08) #設定刻度範圍最大值
ax.set_rticks([]) #隱藏刻度標籤
ax.set_xticklabels(labels,fontsize=8)
ax.set_theta_zero_location('N') #設定0度正北方向
ax.set_theta_direction(-1) #設定逆時針方向繪圖
ax.legend(loc=(0.82,0.92),ncol=1,fontsize=8) # 新增圖例
輸出結果:
完整程式碼
#(1)匯入庫
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from scipy import interpolate
#(2)匯入資料
path=r'path'
data=pd.read_excel(path,sheet_name='雷達圖',index_col=0)
#(3)圖紙設定
plt.rcParams['savefig.dpi'] = 300 # 圖片畫素
plt.rcParams['figure.dpi'] = 120 # 解析度
plt.rcParams['font.sans-serif']=['SimHei'] #顯示中文
plt.rcParams['axes.unicode_minus']=False #顯示負號
#(4)劃分角度
n=len(data.index)
theta=np.linspace(0,2*np.pi,n,endpoint=True) #獲取8個方向的角度值
R1=data['290m']/data['290m'].min()
R2=data['312m']/data['312m'].min()
#(5)構造平滑曲線函式
x_new=np.linspace(theta[0],theta[8],100)
f=interpolate.interp1d(theta,R1,kind='slinear')
y_smooth=f(x_new)
f1=interpolate.interp1d(theta,R2,kind='slinear')
y_smooth1=f1(x_new)
#(6)設定不同方向
labels=list(['0','45°','90°','135°','180°','225°','270°','315°'])
#(7)繪圖
fig,ax=plt.subplots(subplot_kw={'projection': 'polar'})
ax.plot(theta,R1,'o',color='blue',markersize=8,fillstyle='none',label='290m')
ax.plot(theta,R2,'D',color='orange',markersize=6,fillstyle='none',label='312m')
ax.plot(x_new,y_smooth,color='blue')
ax.plot(x_new,y_smooth1,color='orange')
ax.set_rmin(0.95) #設定刻度範圍最小值
ax.set_rmax(1.08) #設定刻度範圍最大值
ax.set_rticks([]) #隱藏刻度標籤
ax.set_xticklabels(labels,fontsize=8)
ax.set_theta_zero_location('N') #設定0度正北方向
ax.set_theta_direction(-1) #設定逆時針方向繪圖
ax.legend(loc=(0.82,0.92),ncol=1,fontsize=8) # 新增圖例