R绘图案例|基于分面的面积图

news2024/11/13 23:27:42

简介

最近参加一个统计建模的比赛。模型建模后,需要展示不同模型的性能指标,数据如下所示:

其中,第 1 列是不同样本,共376条。第 2-4 列是随机森林得到的结果,第 5-7 列是XGBoost的结果。一共使用了三种评价指标(分类数据:准确率,召回率和 F1 得分)。

对于这样的数据,读者会使用这么的方式进行可视化?欢迎文末留言交流~

小编当时想到的是,使用面积图展示,最终图形如下:

结论:从图中可以看出,两种集成算法对于 376 个叶类分类结果的评估指标都比较接近于 1,说明这两种方法整体效果比较满意。 但是对于 XGBoost 来说,小于 1 的部分更多,说明某些叶类分类效果差的情况更多。

注意:如果不是这个方向,可能看的不大懂。但是没关系,学会绘制,并将其用到自己的领域即可。在公众号后台回复[建模比赛案例图形]即可免费获取。

接下来,将展示整个绘制过程。

加载数据

library(readxl)   # 加载 Excel 数据集
library(ggplot2)  # 绘制图形
library(tidyverse) 
library(cowplot)  # 合并图形
library(viridis)  # 图形配色
library(showtext) # 解决中文字体显示问题
showtext_auto()

使用 readxl 包中的 read_excel() 加载 sheet=1 的数据集。并修改数据列名预览如下:

dat = read_excel("test.xlsx",sheet=1,na="NA")
colnames(dat) = c("Id",paste("X",1:6,sep=''))
head(dat)

使用 Tidyverse 包中的 pivot_longer() 将宽表转化为长表,具体教程可见:《R语言教程》。此时得到 ggplot2 所需的数据类型。

注意:小编这里将不同评价指标单独绘制,最后进行合并。

dat %>% select(c(Id,X1,X4)) %>% rename("随机森林"=X1, "XGBoost"=X4) %>% 
  pivot_longer(
             cols = c("随机森林","XGBoost"),
             names_to = "method",
             names_transform = list(method = as.character),
             values_to = "Acc") -> dat1

绘制单个评价指标结果

先绘制准确率的图形,使用的几何对象为:geom_area(),并利用 facet_wrap() 对方法(method)进行分面。之后,对主题以进行修改。使用自定义的颜色修改配色。

cols <- c("#85BA8F", "#A3C8DC","#349839","#EA5D2D","#EABB77","#F09594")
p1 = ggplot(dat1) + 
  geom_area(aes(Id,Acc),fill = cols[1]) + 
  facet_wrap(vars(method),nrow = 2,strip.position = "top") +
  theme_bw() + 
  ylab("精确率") + 
  xlab("叶类") + #主题设置
  theme(panel.grid = element_blank()) 
p1

同理,绘制其他两种指标体系的结果。这里就不放出来了,完整代码见公众号,回复【建模比赛案例图形】即可免费获取,或者文末。

合并图形

最后使用 cowplot 包中的 plot_grid() 将三个指标图形进行合并

plot_grid(p1,p2,p3,ncol = 3)

完整代码

# install.packages("readxl")
library(readxl)
library(ggplot2)
library(tidyverse)
library(cowplot)
library(viridis)
library(showtext)
showtext_auto()


### 绘制不同方法的区域图===========
dat = read_excel("test.xlsx",sheet=1,na="NA")
colnames(dat) = c("Id",paste("X",1:6,sep=''))
head(dat)

dat %>% select(c(Id,X1,X4)) %>% rename("随机森林"=X1, "XGBoost"=X4) %>% 
  pivot_longer(
             cols = c("随机森林","XGBoost"),
             names_to = "method",
             names_transform = list(method = as.character),
             values_to = "Acc") -> dat1
head(dat1)
cols <- c("#85BA8F", "#A3C8DC","#349839","#EA5D2D","#EABB77","#F09594")

#==
p1 = ggplot(dat1) + 
  geom_area(aes(Id,Acc),fill = cols[1]) + 
  facet_wrap(vars(method),nrow = 2,strip.position = "top") +
  theme_bw() + 
  ylab("精确率") + 
  xlab("叶类") + #主题设置
  theme(panel.grid = element_blank()) 
p1

#==
dat %>% select(c(Id,X2,X5)) %>% rename("随机森林"=X2, "XGBoost"=X5) %>% 
  pivot_longer(
    cols = c("随机森林","XGBoost"),
    names_to = "method",
    names_transform = list(method = as.character),
    values_to = "Acc") -> dat2


p2 = ggplot(dat2) + geom_area(aes(Id,Acc),fill = cols[2]) + facet_wrap(vars(method),nrow = 2,strip.position = "top") +
  theme_bw() + ylab("召回率") + xlab("叶类") + #主题设置
  theme(panel.grid = element_blank())
p2

#==
dat %>% select(c(Id,X3,X6)) %>% rename("随机森林"=X3, "XGBoost"=X6) %>% 
  pivot_longer(
    cols = c("随机森林","XGBoost"),
    names_to = "method",
    # names_transform = list(method = as.factor),
    values_to = "Acc") -> dat3

p3 = ggplot(dat3) + 
  geom_area(aes(Id,Acc),fill = cols[4]) + 
  facet_wrap(vars(method),nrow = 2,strip.position = "top") +
  theme_bw() + 
  ylab("F1得分") + 
  xlab("叶类") + #主题设置
  theme(panel.grid = element_blank())
p3
#== 合并图形
plot_grid(p1,p2,p3,ncol = 3)

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

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

相关文章

数字验证学习笔记——UVM学习3 核心基类

一、核心基类 UVM世界中的类最初都是从一个uvm_void根类&#xff08;root class&#xff09;继承来的&#xff0c;而实际上这个类并没有成员变量和方法。 uvm_void只是一个虚类&#xff08;virtual class&#xff09;&#xff0c;还在等待将来继承于它的子类去开垦。在继承与u…

适合新手的Pytorch的中文文档

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

牛客练习赛106

牛客练习赛106 C D 脑筋急转弯的构造题 E 染色法判断二分图 结论&#xff0c;这个图是二分图说明不存在奇环 设左边是x&#xff0c;右边是y 则有xyn,xyn, xyn,且x∗y>边数n∗(n−1)/2−mx*y>边数n*(n-1)/2-m x∗y>边数n∗(n−1)/2−m 也就是说左式最大是n∗n/4(xn/…

【1774. 最接近目标价格的甜点成本】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 你打算做甜点&#xff0c;现在需要购买配料。目前共有 n 种冰激凌基料和 m 种配料可供选购。而制作甜点需要遵循以下几条规则&#xff1a; 必须选择 一种 冰激凌基料。可以添加 一种或多种 配料&…

[附源码]计算机毕业设计ssm校园一卡通服务平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Apache+PHP8+MYSQL的配置(目前最新版本)

已有很多年没有WEB开发了&#xff0c;本机都没了测试的服务环境&#xff0c;前几天GO语言的一个测试用例需要用到WEB&#xff0c;于是快速搭建一个Apche环境&#xff0c;也顺便将PHP和MYSQL的环境也配置好&#xff0c;贴出来方便自己和他人&#xff0c;临时需要的时候就更快了&…

机器人控制算法八之路径规划算法:RRT、RRT-Connect、Dynamic-Domain RRTs*

机器人控制算法八之路径规划算法&#xff1a;RRT、RRT-Connect、Dynamic-Domain RRTs* 本文主要介绍基于RRT快速搜索随机树的路径规划算法及其改进&#xff0c;主要参考以下论文&#xff1a; 1.1998 Rapidly-exploring random trees: A new tool for path planning2.IEEE2000 R…

[附源码]计算机毕业设计基于springboot的家政服务平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

java毕业设计项目_第167期ssm多用户博客个人网站_计算机毕业设计

java毕业设计项目_第167期ssm多用户博客个人网站_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm多用户博客个人网站》 该项目分为2个角色&#xff0c;管理员和用户。 用户可以浏览前台,包含功能有&#xff1a; 首页、博文类型、学生博客、论坛信息 、新闻资讯…

[附源码]Python计算机毕业设计Django框架的食品安全监督平台的设计与实现

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Jsp+MySQL学生学籍信息管理系统 Java毕业设计

中学生学籍信息管理系统主要有三个访问权限。首先是管理员,管理员是整个系统的所有功能的管理者,有对学科、班级、教师、学生学籍信息、课表、学生身体素质以及教务公告的管理权限,可以对以上所有信息进行增删改查&#xff1a;教师角色则有查看教务公告和修改所教授科目对应班级…

大数据:Sqoop 简介与安装

一、Sqoop 简介 Sqoop 是一个常用的数据迁移工具&#xff0c;主要用于在不同存储系统之间实现数据的导入与导出&#xff1a; 导入数据&#xff1a;从 MySQL&#xff0c;Oracle 等关系型数据库中导入数据到 HDFS、Hive、HBase 等分布式文件存储系统中&#xff1b; 导出数据&am…

C++ Primer Plus第五版笔记(p101-150)

1 数组和vector类似&#xff0c;数组的大小确定不变&#xff0c;不能随意向数组中增加元素。 2 数组维度必须是一个常量表达式 3 不允许用auto关键字由初始值列表推断类型&#xff0c;另外和vector一样&#xff0c;数组的元素应该为对象&#xff0c;因此不存在引用的数组 4 字符…

7. TTL 延迟队列

二八佳人体似酥&#xff0c;腰间仗剑斩愚夫。虽然不见人头落&#xff0c;暗里教君骨髓枯。 创建两个队列 QA和 QB&#xff0c;两者队列 TTL 分别设置为 10S 和 40S&#xff0c;然后在创建一个交换机 X和死信交 换机 Y&#xff0c;它们的类型都是 direct&#xff0c;创建一个死信…

SpringBoot_项目打包部署

SpringBoot项目可以是jar类型的maven项目&#xff0c;也可以是一个war类型的maven项目&#xff0c;取决于我们要不要整合jsp使用。但是不管是哪种项目类型&#xff0c;已经不是我们传统意义上的项目结构了 在本地使用SpringBoot的启动器即可访问我们开发的项目。如果我们将项目…

尝试 vue 实现 SEO

背景: 官网使用 VUE 写的, 且 使用 <component /> 动态创建组件, 通过 手动配置的组件, 动态生成页面内容 然后收到通知, 需要实现 SEO , 于是就开始了 VUE SEO 的拉锯战..... 第一种尝试 VUEphantomjs 首先说下原理 phantomjs 是可以部署在服务端的 无头浏览器,…

最强大脑记忆曲线(12)-- 录入数据修改

录入数据修改一、设计思路二、解决过程2.1 设计修改窗口2.2 转成py文件2.3 写业务逻辑1、先显示一下基础页面2、配合适配器&#xff0c;自动调整窗口大小3、在数据录入窗口或背记窗口双击某条记录3.1 增加信号3.2 在槽函数中打开修改页面**3.3 两个页面之间传递信号**3.4 在子窗…

24点问题(带输出构造方式)

问题描述&#xff1a; 在屏幕上输入1〜10范围内的4个整数&#xff08;可以有重复&#xff09;&#xff0c;对它们进行加、减、乘、除四则运算后&#xff08;可以任意的加括号限定计算的优先级&#xff09;&#xff0c;寻找计算结果等于24的表达式。 例如输入4个整数4、5、6、7…

1. RabbitMq 的基本概念

参考使用: 尚硅谷 消息中间件 RabbitMQ 课件 MQ 的概念 什么是 MQ MQ(message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&#xff0c;只不过队列中存放的内容是 message 而已&#xff0c;还是一种跨进程的通信机制&#xff0c;用…

[附源码]计算机毕业设计毕业生就业管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…