翼度科技»论坛 编程开发 python 查看内容

绘制雷达图

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
1.导入数据库
  1. import pandas as pd
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. from scipy import interpolate
复制代码
2.导入数据
  1. path=r'path'
  2. data=pd.read_excel(path,sheet_name='雷达图',index_col=0)
  3. 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.图纸设置
  1. plt.rcParams['savefig.dpi'] = 300 # 图片像素
  2. plt.rcParams['figure.dpi'] = 120 # 分辨率
  3. plt.rcParams['font.sans-serif']=['SimHei']   #显示中文
  4. plt.rcParams['axes.unicode_minus']=False      #显示负号
复制代码
4.划分角度
  1. n=len(data.index)
  2. theta=np.linspace(0,2*np.pi,n,endpoint=True) #获取8个方向的角度值
  3. R1=data['290m']/data['290m'].min()
  4. R2=data['312m']/data['312m'].min()
复制代码
5.构造平滑曲线函数
  1. x_new=np.linspace(theta[0],theta[8],100)
  2. f=interpolate.interp1d(theta,R1,kind='slinear')
  3. y_smooth=f(x_new)
  4. f1=interpolate.interp1d(theta,R2,kind='slinear')
  5. y_smooth1=f1(x_new)
复制代码
6.设置不同方向
  1. labels=list(['0','45°','90°','135°','180°','225°','270°','315°'])
复制代码
7.绘图
  1. fig,ax=plt.subplots(subplot_kw={'projection': 'polar'})
  2. ax.plot(theta,R1,'o',color='blue',markersize=8,fillstyle='none',label='290m')
  3. ax.plot(theta,R2,'D',color='orange',markersize=6,fillstyle='none',label='312m')
  4. ax.plot(x_new,y_smooth,color='blue')
  5. ax.plot(x_new,y_smooth1,color='orange')
  6. ax.set_rmin(0.95) #设置刻度范围最小值
  7. ax.set_rmax(1.08) #设置刻度范围最大值
  8. ax.set_rticks([]) #隐藏刻度标签
  9. ax.set_xticklabels(labels,fontsize=8)
  10. ax.set_theta_zero_location('N')  #设置0度正北方向
  11. ax.set_theta_direction(-1) #设置逆时针方向绘图
  12. ax.legend(loc=(0.82,0.92),ncol=1,fontsize=8) # 添加图例
复制代码
输出结果:

完整代码
  1. #(1)导入库import pandas as pd
  2. import matplotlib.pyplot as plt
  3. import numpy as np
  4. from scipy import interpolate#(2)导入数据path=r'path'data=pd.read_excel(path,sheet_name='雷达图',index_col=0)#(3)图纸设置plt.rcParams['savefig.dpi'] = 300 # 图片像素
  5. plt.rcParams['figure.dpi'] = 120 # 分辨率
  6. plt.rcParams['font.sans-serif']=['SimHei']   #显示中文
  7. plt.rcParams['axes.unicode_minus']=False      #显示负号#(4)划分角度n=len(data.index)
  8. theta=np.linspace(0,2*np.pi,n,endpoint=True) #获取8个方向的角度值
  9. R1=data['290m']/data['290m'].min()
  10. R2=data['312m']/data['312m'].min()#(5)构造平滑曲线函数x_new=np.linspace(theta[0],theta[8],100)
  11. f=interpolate.interp1d(theta,R1,kind='slinear')
  12. y_smooth=f(x_new)
  13. f1=interpolate.interp1d(theta,R2,kind='slinear')
  14. 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'})
  15. ax.plot(theta,R1,'o',color='blue',markersize=8,fillstyle='none',label='290m')
  16. ax.plot(theta,R2,'D',color='orange',markersize=6,fillstyle='none',label='312m')
  17. ax.plot(x_new,y_smooth,color='blue')
  18. ax.plot(x_new,y_smooth1,color='orange')
  19. ax.set_rmin(0.95) #设置刻度范围最小值
  20. ax.set_rmax(1.08) #设置刻度范围最大值
  21. ax.set_rticks([]) #隐藏刻度标签
  22. ax.set_xticklabels(labels,fontsize=8)
  23. ax.set_theta_zero_location('N')  #设置0度正北方向
  24. ax.set_theta_direction(-1) #设置逆时针方向绘图
  25. ax.legend(loc=(0.82,0.92),ncol=1,fontsize=8) # 添加图例
复制代码
来源:https://www.cnblogs.com/DavidShang/p/18306746
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具