分面中添加直线

news2024/11/15 20:10:03

简介

这篇也是分享最近统计建模中所绘制的一副图形。总体而言和前面的几篇:xxx 类似。都是从“数据导入”到“基于分面的可视化”。但是本文的小技巧是,在不同的分面中添加直线。最后得到的图形如下:

注意:本文数据和代码在公众号后台回复[建模比赛案例图形]即可免费获取。

导入数据

使用 readxl 包中的 read_excel() 加载 sheet=3 的数据集。预览如下:

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


dat3 = read_excel("test.xlsx",sheet=3,na="NA")
head(dat3)

数据处理

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

dat3 %>%
  pivot_longer(
    cols = `官方结果`:`XGBoost`,
    names_to = "模型",
    names_transform = list(模型 = as.character),
    values_to = "value") -> dat_3_new
dat_3_new$ 模型 = factor(dat_3_new$ 模型,
                      levels = c("官方结果","朴素贝叶斯","支持向量机",
                                 "决策树","随机森林","XGBoost"))

注意: 这里将模型该列转化为因子形式,并将因子水平进行设定。如果不设定,会按照首字拼写从小到大排序。本文想将“官方结果”放到第一位与其他方法比较,所以进行了这样的处理。

数据可视化

传统方法

传统方法可以得到以下图形。但是小编想加入“官方结果”的横线,从而突出我们方法和该结果的比较。

dat_3_new %>% ggplot(aes(`模型`,value,fill = `模型`)) + 
  geom_col() +
  facet_wrap(vars(`叶类名称`)) +
  theme_bw() + ylab("准确度") + xlab("") + #主题设置
  scale_fill_viridis(discrete = T,option = "D") +
  theme(panel.grid = element_blank(),
        legend.position = 'bottom',
        legend.direction = "horizontal",
       axis.text.x = element_blank(),
       axis.ticks.x = element_blank())

各分面添加横线

这里首先构建 dummy2 数据框。

注意:列名称的构建, “叶类名称”名称需要和分面中的名称一致;“Z” 中赋值为“官方结果”(会按照这个数据画横线)。

dummy2 <- data.frame(叶类名称 = dat3$ 叶类名称, Z = dat3$ 官方结果)

之后,在原始代码中加入geom_hline(data = dummy2,aes(yintercept = Z)) 即可。

dummy2 <- data.frame(叶类名称 = dat3$ 叶类名称, Z = dat3$ 官方结果)
dat_3_new %>% ggplot(aes(`模型`,value,fill = `模型`)) + 
  geom_col() +
  facet_wrap(vars(`叶类名称`)) +
  geom_hline(data = dummy2,aes(yintercept = Z)) +
  # scale_fill_manual(values = cols[1:6]) +
  theme_bw() + ylab("准确度") + xlab("") + #主题设置
  scale_fill_viridis(discrete = T,option = "D") +
  theme(panel.grid = element_blank(),
        legend.position = 'bottom',
        legend.direction = "horizontal",
       axis.text.x = element_blank(),
       axis.ticks.x = element_blank())

全文代码

dat3 = read_excel("test.xlsx",sheet=3,na="NA")
head(dat3)
dat3 %>%
  pivot_longer(
    cols = `官方结果`:`XGBoost`,
    names_to = "模型",
    names_transform = list(模型 = as.character),
    values_to = "value") -> dat_3_new

dat_3_new$ 模型 = fct_relevel(dat_3_new$ 模型, 
                           "官方结果","朴素贝叶斯","支持向量机","决策树","随机森林","XGBoost")

head(dat_3_new)

dummy2 <- data.frame(叶类名称 = dat3$ 叶类名称, Z = dat3$ 官方结果)
dat_3_new %>% ggplot(aes(`模型`,value,fill = `模型`)) + 
  geom_col() +
  facet_wrap(vars(`叶类名称`)) +
  geom_hline(data = dummy2,aes(yintercept = Z)) +
  # scale_fill_manual(values = cols[1:6]) +
  theme_bw() + ylab("准确度") + xlab("") + #主题设置
  scale_fill_viridis(discrete = T,option = "D") +
  theme(panel.grid = element_blank(),
        legend.position = 'bottom',
        legend.direction = "horizontal",
       axis.text.x = element_blank(),
       axis.ticks.x = element_blank())

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

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

相关文章

交易所通用质押式回购

一、专业术语 逆回购&#xff1a;指资金融出方将资金融给资金融入方&#xff0c;收取有价证券作为质押&#xff0c;并在未来收回本息&#xff0c;并解除有价证券质押的交易行为。 债券通用质押式回购交易&#xff1a;&#xff08;简称“通用回购”&#xff09;是指资金融入方…

划分成绩ABCD

已知成绩等级划分为{“A”:[90~100],"B":[80~89],"c":[60~79],"D":[0~59]} 1、随机生成20个整数&#xff0c;范围0-100 2、按等级归类&#xff0c;输出成绩等级列表字典如下&#xff1a; {A: [96, 96, 97, 97, 100, 100], B: [86], C: [71, 7…

Python学习基础笔记二十二——生成器

一个包含yield关键字的函数就是一个生成器函数。yield可以为我们从函数中返回值&#xff0c;但是yield又不同于return&#xff0c;return的执行意味着程序的结束&#xff0c;调用生成器函数不会得到返回的具体的值&#xff0c;而是得到一个可迭代的对象。每一次获取这个可迭代对…

微机原理与接口技术:数模转换和模数转换 详细笔记

文章目录1.数模转换1.1.数模转换原理1.1.1.权电阻D/A转换器1.1.2.R-2R T型电阻网络D/A转换器1.1.3.补充 D/A转换器的主要技术指标1.2.D/A转换芯片——DAC08321.2.1.引脚介绍1.2.2.工作方式直通输入方式单缓冲方式双缓冲方式2.模数转换2.1.信号变换中的采样、量化和编码2.1.1.采…

『NLP学习笔记』TextCNN文本分类原理及Pytorch实现

TextCNN文本分类原理及Pytorch实现 文章目录一. TextCNN网络结构1.1. CNN在文本分类上得应用1.2. 回顾CNN以及Pytorch解析1.2.1. CNN特点1.2.2. 一维卷积Conv1d1.2.3. 二维卷积 Conv2d1.2.3. 三维卷积 Conv3d1.2.4. 池化(pooling)操作1.2.4. nn.BatchNorm操作1.3. nn.ModuleLi…

大数据之数据的压缩与存储

文章目录前言一、Hive的压缩方式&#xff08;一&#xff09; 概念&#xff08;二&#xff09; 简介&#xff08;三&#xff09; 数据分层的压缩方式选择&#xff08;四&#xff09;开启Map输出阶段压缩&#xff08;五&#xff09;开启Reduce输出阶段压缩二、 Hive的数据存储格式…

再有人问你kafka 把这篇扔给他(建议收藏)

前言 最近重新读起kafka的内容&#xff0c;看到kafka官网文档里&#xff0c;有专门一栏讲kafka的设计&#xff0c;觉得很受益。我们常常会知道这个中间件是什么&#xff0c;是什么机制&#xff0c;这次想换个角度来聊&#xff0c;它在设计消息系统的时候&#xff0c;都做了哪些…

火山引擎虚拟数字人技术与应用

导读&#xff1a;火山引擎正在打造完善的虚拟数字人技术和应用体系&#xff0c;那么火山引擎是如何定义虚拟数字人的呢&#xff1f;火山引擎 2D 虚拟数字人和 3D 数字人采用了怎样先进的技术&#xff1f;火山引擎数字人有哪些应用和前景展望&#xff1f;今天我们就来一起探秘火…

【Transformer】Transformer理论知识

Transformer目录Transformer介绍Seq2seq结构Encoder结构Decoder结构Autoregressive Decoder&#xff08;AT&#xff09;&#xff1a;Encoder和Decoder对比和联系Cross attention&#xff1a;Non-autoregressive Decoder&#xff08;NAT&#xff09;&#xff1a;训练Seq2seq Mod…

基于ssm高校档案管理系统源码

档案管理作为企事业单位管理工作的基础&#xff0c;档案是企事业单位建设信息系统的重要组成部分&#xff0c;档案是提高企事业单位工作质量和工作效率的必要条件&#xff0c;甚至是维护历史真实面貌的一项重要工作。 1、档案信息数字化能够提供档案信息方便快捷的服务方式。 数…

量化风控的贷前实操课—详解的规则调优

风控全流程涉及贷前风控、贷中监控、贷后催收&#xff0c;每个模块都环环相扣&#xff0c;互相关联。而作为其中最关键模块的贷前风控&#xff0c;几乎是整个风控模块中最重要的部分&#xff0c;现金贷等互金产品重贷前、信用卡重贷中。 贷前风控是可以说整个防控中的第一道防线…

简单的CNN实现——MNIST手写数字识别

0.概述 此文章不涉及复杂的理论知识&#xff0c;仅仅只是利用PyTorch组建一个简单的CNN去实现MNIST的手写数字识别&#xff0c;用好的效果去激发学习CNN的好奇心&#xff0c;并且以后以此为基础&#xff0c;去进行一些改造。&#xff08;前提是把基础代码看明白&#xff09; 本…

java计算机毕业设计ssm社团管理系统0gl2e(附源码、数据库)

java计算机毕业设计ssm社团管理系统0gl2e&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。…

Android Room的使用详解

Android Room的使用详解 一&#xff1a;Room的基本介绍 Room 是 Android 架构组件的一部分&#xff0c;Room 持久性库在 SQLite上提供了一个抽象层&#xff0c;以便在充分利用 SQLite 的强大功能的同时&#xff0c;能够流畅地访问数据库。具体来说&#xff0c;Room 具有以下优…

【Linux Kernel 6.1 代码剖析】- 进程管理概论

目录 进程与线程的概念&#xff08;内核线程和用户线程&#xff09; 进程的3种基本状态 引入挂起后的7种基本状态 Linux 内核6.1 - 进程的8种详细状态 进程控制块 PCB SMP 架构 进程与线程的概念&#xff08;内核线程和用户线程&#xff09; 进程是正在运行的程序实体&a…

基于java+ssm+vue+mysql的旅游管理系统

项目介绍 随着现在网络的快速发展&#xff0c;网上管理系统也逐渐快速发展起来&#xff0c;网上管理模式很快融入到了许多企业的之中&#xff0c;随之就产生了“旅游信息管理系统”&#xff0c;这样就让旅游信息管理系统更加方便简单。 对于本旅游信息管理系统的设计来说&…

QDir(目录)

QDir 类提供对目录结构及其内容的访问&#xff0c;QDir 用于操作路径名、访问有关路径和文件的信息以及操作底层文件系统&#xff0c;它也可以用来访问Qt的资源系统。 Qt使用“/”作为通用目录分隔符&#xff0c;就像URL中的“/”用作路径分隔符一样。如果您始终使用“/”作为…

2022年大一学生实训作业【基于HTML+CSS制作中华传统文化传统美德网站 (6页面)】

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【YOLOv7/YOLOv5系列算法改进NO.47】改进激活函数为GELU

文章目录前言一、解决问题二、基本原理三、​添加方法四、总结前言 作为当前先进的深度学习目标检测算法YOLOv7&#xff0c;已经集合了大量的trick&#xff0c;但是还是有提高和改进的空间&#xff0c;针对具体应用场景下的检测难点&#xff0c;可以不同的改进方法。此后的系列…

SparkSQL - 介绍及使用 Scala、Java、Python 三种语言演示

一、SparkSQL 前面的文章中使用 RDD 进行数据的处理&#xff0c;优点是非常的灵活&#xff0c;但需要了解各个算子的场景&#xff0c;需要有一定的学习成本&#xff0c;而 SQL 语言是一个大家十分熟悉的语言&#xff0c;如果可以通过编写 SQL 而操作RDD&#xff0c;学习的成本…