plt绘制雷达图

news2025/2/24 14:00:51

1、圆形

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif']=['SimHei']     #显示中文
plt.rcParams['axes.unicode_minus']=False       #正常显示负号

def radar_map(data, label, cls):
    # 设置雷达图的角度,用于平分切开一个圆面
    n = len(label)
    angles = np.linspace(0, 2 * np.pi, n, endpoint=False)

    # 将折线图形进行封闭操作
    angle = np.concatenate((angles, [angles[0]]))
    data = np.concatenate((data, data[:, None, 0]), axis=1)
    label = np.concatenate((label, [label[0]]))

    # 绘图
    fig = plt.figure(figsize=(7, 7))
    ax = fig.add_subplot(111, polar=True)  # 参数polar, 以极坐标的形式绘制图形

    # 画线
    for i in range(len(data)):
        ax.plot(angle, data[i], 'o-', linewidth=2, label=cls[i])
        # ax.fill(angle, data[i], alpha=0.7)  # 填充底色

    ax.set_thetagrids(angle * 180 / np.pi, label)  # 添加属性标签
    ax.set_ylim(0, 100)  # 设置极轴的区间范围
    ax.set_theta_zero_location('N')  # 设置极坐标的起点(即0°)在正北方向,即相当于坐标轴逆时针旋转90°
    # ax.spines['polar'].set_visible(False)  # 不显示极坐标最外圈的圆
    # ax.set_yticks([])  # 不显示坐标间隔
    plt.grid(True, c='gray', linestyle='--')  # 设置网格线样式
    plt.title('示例', fontsize=12)  # 添加标题
    plt.legend(loc='lower right', bbox_to_anchor=(0.0, 0.0))  # 设置图例的位置,在画布外
    plt.show()

if __name__ == '__main__':
    # 要展示的指标
    label = np.array(['AA', 'OA', 'kappa', "PA", "UA"])

    # 每个数据的名字
    cls = np.array(['A_1', 'A_2', 'A_3', "A_4", "A_5"])

    # 数据
    data = np.array([[92.3, 95.1, 90.2, 65.2, 75.1],
                     [50.3, 65.2, 80.4, 90.2, 77.6],
                     [45.2, 55.3, 86.2, 45.2, 88.3],
                     [85.2, 65.3, 98.2, 47.2, 58.6],
                     [88.5, 95.3, 65.2, 84.5, 78.6]])

    # 绘制雷达图
    radar_map(data, label, cls)

2、多边形

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['font.sans-serif']=['SimHei']     #显示中文
plt.rcParams['axes.unicode_minus']=False       #正常显示负号

def radar_map(data, label, cls):

    # 设置雷达图的角度,用于平分切开一个圆面
    n = len(label)
    angles = np.linspace(0, 2 * np.pi, n, endpoint=False)

    # 将折线图形进行封闭操作
    angle = np.concatenate((angles, [angles[0]]))
    data = np.concatenate((data, data[:,None,0]),axis=1)
    label = np.concatenate((label, [label[0]]))

    # 绘图
    fig = plt.figure(figsize=(7, 7))
    ax = fig.add_subplot(111, polar=True)  # 参数polar, 以极坐标的形式绘制图形

    # 画若干个多边形
    max_ = 105
    min_ = 0
    for i in np.arange(min_, max_, 20):
        ax.plot(angle, [i] * (n + 1), '--', lw=0.5, color='black')

    # 画线
    for i in range(len(data)):
        ax.plot(angle, data[i], 'o-', linewidth=2, label=cls[i])
        # ax.fill(angle, data[i], alpha=0.7)  # 填充底色

    # 绘制各个类别的数值
    # for i in range(len(data)):
    #     for angle_,data_ in zip(angle,data[i]):
            # ax.text(angle_, data_ + 5, '%.00f' % data_, ha='center', va='center', fontsize=10, color='black')

    # 画半径线
    for i in range(len(label[:-1])):
        ax.plot([angles[i], angles[i]], [0, 102], '--', lw=0.5, color='black')  # 画5条半径线,每个角度连接圆心0和顶点100

    ax.set_thetagrids(angle * 180 / np.pi, label)  # 添加属性标签
    """
    # 该两行代码,同ax.set_thetagrids(angle * 180 / np.pi, label)  # 添加属性标签
    ax.set_xticks(angle[:-1])  # 去除最后一个刻度
    ax.set_xticklabels(label[:-1])
    """
    # ax.set_ylim(0, 100)  # 设置极轴的区间范围
    ax.set_rlabel_position(0) # 设置网格间隔大小标签的角度
    ax.set_theta_zero_location('N')  # 设置极坐标的起点(即0°)在正北方向,即相当于坐标轴逆时针旋转90°
    ax.spines['polar'].set_visible(False)  # 不显示极坐标最外圈的圆
    ax.tick_params(pad=-2)  # 调整刻度标签与轴的距离
    # ax.set_yticklabels([20,40,60,80,100]) # 去除网格间隔的刻度标签。添加数字就是修改
    # ax.set_yticks([])  # 不显示坐标间隔。添加数字就是修改
    plt.grid(c='gray', linestyle='--')  # 设置网格样式
    plt.title('示例', fontsize=12) # 添加标题
    plt.legend(loc='lower right', bbox_to_anchor=(0.0, 0.0))  # 设置图例的位置,在画布外
    plt.show()

if __name__ == '__main__':

    # 要展示的指标
    label = np.array(['AA','OA','kappa',"PA","UA"])

    # 每个数据的名字
    cls = np.array(['A_1','A_2','A_3',"A_4","A_5"])

    # 数据
    data = np.array([[92.3,95.1,90.2,65.2,75.1],
                     [50.3,65.2,80.4,90.2,77.6],
                     [45.2,55.3,86.2,45.2,88.3],
                     [85.2,65.3,98.2,47.2,58.6],
                     [88.5,95.3,65.2,84.5,78.6]])

    # 绘制雷达图
    radar_map(data, label, cls)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/863354.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】

文章目录 1. 安装IIS必要WebDav组件2. 客户端测试3. 使用cpolar内网穿透,将WebDav服务暴露在公网3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访问测试 4. 安装Raidrive客户端4.1 连接WebDav服务器4.2 连接成功4.2 连接成功 1. Linux(centos8…

聚焦阅读和写作两大语文专项,猿辅导推出语文教辅《我们的语文》

近期正在热映的动画电影《长安三万里》火了。有人说,这是一部披着电影外衣的唐诗启蒙片,从中感受到了传统文化的魅力和教育的“延时性”。电影里借大唐诗人之口,通过48首诗词让我们体味到从大唐奔流而来的诗意,带我们回味独属的中…

大模型时代下的我们,破茧重生探索新开发范式!|WAVE SUMMIT 开源论坛

WAVE SUMMIT深度学习开发者峰会2023由深度学习技术及应用国家工程研究中心主办,百度飞桨和文心大模型承办。大会设有1个主论坛,5个平行论坛,本次为大家介绍「开源共建 智领未来」开源论坛。 AGI时代到来,机遇与危机并存 身处时代洪…

有没有推荐的golang的练手项目?

前言 下面是github上的golang项目,适合练手,可以自己选择一些项目去练习,整理不易,希望能多多点赞收藏一下!废话少说,我们直接进入正题>>> 先推荐几个教程性质的项目(用于新手学习、巩…

Cobbler自动化部署安装CentOS7

Cobbler介绍: 1)Cobbler是一个Linux服务器安装的服务,可以通过网络启动PXE的方式来快速安装、重装物理服务器和虚拟机,同时还可以管理DHCP、DNS等。 2)Cobbler 可以使用命令行的方式管理,也提供了基于Web的…

即时通讯App开发:从0到1的全过程

在数字化时代,即时通讯已经成为人们生活中不可或缺的一部分。如果你想进入这个领域并开发属于自己的即时通讯应用程序,本文将为你提供从0到1的全过程指南。 1. 设想和市场研究 在着手开发之前,你需要明确你的应用程序的核心特点和目标用户群…

LeetCode算法递归类—验证二叉搜索树

目录 98. 验证二叉搜索树 题解: 代码: 运行结果:​编辑 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含…

C语言必会题目(1)

W...Y的主页 😊 代码仓库分享❤️ 在学习语言时,最重要的就是练习,光听不练假把式。下面我就推荐一些C语言必会的题。 执行下面程序,正确的输出是( ) int x5,y7; void swap() { int z; zx; xy; yz; } int…

【几个python虚拟环境会遇到的问题】

几个python虚拟环境会遇到的问题 twine is not recognized as an internal or external command,operable program or batch file.setup命令不报错但不起作用pipreqs is not recognized as an internal or external command,operable program or batch file. ‘twine’ is not …

安卓中常见的字节码指令介绍

问题背景 安卓开发过程中,经常要通过看一些java代码对应的字节码,来了解java代码编译后的运行机制,本文将通过一个简单的demo介绍一些基本的字节码指令。 问题分析 比如以下代码: public class test {public static void main…

I 2C 接口控制器理论讲解

IIC系列文章: (1) I 2C 接口控制器理论讲解 (2) I2C接口控制设计与实现 文章目录 一、 IIC协议二、IIC协议解析1.特点2.规定3.器件地址4.存储地址 三、IIC写时序1.单字节写时序2.连续写时序(页写时序) 四、IIC读时序1.单字节读时序2.连续读时…

Unity3D高级编程:主程手记学习1

第一章 软件架构 Untiy 分层设计 分层后再分治

C++复习笔记——primer第五版

文章目录 一、引用和指针1.引用2.指针2.1利用指针访问对象2.2指针的值或指针所指对象的值的改变 3.赋值和指针4.指向指针的引用 二、String1.初始化String对象的方式2. string对象上的操作3.使用getline读取一整行4.字面值和字符串相加5.使用for循环改变字符串中的字符 三、Vec…

【Linux】HTTP协议——应用层

目录 HTTP协议 HTTP简介 认识URL 一、协议方案名 二、登录信息 三、服务器地址 四、服务器端口号 五、带层次的文件路径 六、查询字符串 七、片段标识符 urlencode和urldecode HTTP协议格式 HTTP请求协议格式 HTTP响应协议格式 HTTP的方法 HTTP的状态码 HTTP常见…

UX与UI设计的区别是什么?看这一篇就够了!

在产品开发和用户体验设计领域,UX(用户体验)与UI(用户界面)设计是两个常被提及的概念,其本质都是在解决产品的用户问题,但在实际的工作场景中,它们代表着不同的设计方向与职责。 简…

【MFC】05.MFC六大机制:程序启动机制-笔记

MFC程序开发所谓是非常简单,但是对于我们逆向人员来说,如果想要逆向MFC程序,那么我们就必须了解它背后的机制,这样我们才能够清晰地逆向出MFC程序,今天这篇文章就来带领大家了解MFC的第一大机制:程序启动机…

YOLOv5 、YOLOv8改进 :SimAM:无参数的注意力机制

在本文中,我们提出了一个用于卷积神经网络的概念简单但非常有效的注意模块。与现有的通道关注模块和空间关注模块相比,我们的模块无需向原始网络添加参数,而是在一层中推断特征图的3-D关注权重。具体来说,我们基于一些著名的神经科…

YOLOv5改进系列(20)——添加BiFormer注意力机制(CVPR2023|小目标涨点神器)

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制 YOLOv5改进系列(2)——添加CBAM注意力机制

途乐证券-美股突然跳水400点,美联储释放重磅信号

一份重磅数据来袭。 北京时间8月10日晚间,美国劳工部发布的7月CPI通胀数据显现,美国7月CPI同比涨幅从6月的3%加速至3.2%,为2022年6月以来首次加速上升,但低于预期的3.3%。美国总统拜登榜首时间表明,美国在通胀方面取得…

从零开始搭建个人博客网站(hexo框架)

1.工具及环境搭建 1)注册GitHub并且新建一个repositories 2)下载node.js以及Git 下载链接: 检验安装是否成功: 【注】:MacOS自带Git,可以直接在终端输入git --version进行检验 3)新建一个…