利用R作圆环条形图

news2025/1/19 23:09:31

图片

从理念上看,本质就是增加了圆环弧度的条形图。如上图2。

需要以下步骤:

数据处理,将EXCEL中的数据做成3*N的表格导入系统,代码如下:library(tidyverse)

library(stringr)library(ggplot2)library(viridis)
stuper <- read.csv("C:/Users/user1/Desktop/20230828/huanbar1.csv")> head(stuper)  group   individual    value id1     A       勐海茶 90.14129  12     A 西双版纳香蕉 32.59547  23     A 西双版纳菠萝 23.19559  34     A   易武正山茶 14.17019  45     A   勐海结良茶 13.01186  56     B       保山猪 48.85315  6

将数据预处理为环形图能够识别的格式,代码如下:

empty_bar <- 3to_add <- data.frame(matrix(NA, empty_bar*nlevels(stuper$group), ncol(stuper)))to_add$group <- rep(levels(stuper$group), each=empty_bar)#为数据表添加分组变量stuper <- rbind(stuper, to_add) # 合并两个数据stuper <- stuper %>% arrange(group) # 将数据根据分组进行排序stuper$id <- seq(1, nrow(stuper))# 获取每个样本的名称在y轴的位置和倾斜角度label_data <- stupernumber_of_bar <- nrow(label_data) # 计算条的数量## 每个条上标签的轴坐标的倾斜角度angle <- 90 - 360 * (label_data$id-0.5) /number_of_bar label_data$hjust <- ifelse( angle < -90, 1, 0) # 调整标签的对其方式label_data$angle <- ifelse(angle < -90, angle+180, angle) ## 标签倾斜角度## 为数据准备基础弧线的数据base_data <- stuper %>% group_by(group) %>%   summarize(start=min(id), end=max(id) - empty_bar) %>%   rowwise() %>% mutate(title=mean(c(start, end)))# 为网格标尺准备数据grid_data <- base_datagrid_data$end <- grid_data$end[c(nrow(grid_data), 1:nrow(grid_data)-1)] + 1grid_data$start <- grid_data$start - 1grid_data <- grid_data[-1,]

数据梳理清楚后,就可以直接画图:

p1 <- ggplot(stuper)+  ## 添加条形图  geom_bar(aes(x=as.factor(id), y=value, fill=group),stat="identity",           alpha=0.8) +  ##为条形图添加一些划分等级的线(20/40/60/80)(按比例添加是因为知道满分100)  geom_segment(data=grid_data, aes(x = end, y = 80, xend = start, yend = 80),               colour = "orange", alpha=0.5, linewidth=0.5 ,inherit.aes = FALSE)+  geom_segment(data=grid_data, aes(x = end, y = 60, xend = start, yend = 60),               colour = "orange", alpha=0.5, linewidth=0.5 ,inherit.aes = FALSE )+  geom_segment(data=grid_data, aes(x = end, y = 40, xend = start, yend = 40),               colour = "orange", alpha=0.5, linewidth=0.5 , inherit.aes = FALSE )+  geom_segment(data=grid_data, aes(x = end, y = 20, xend = start, yend = 20),               colour = "orange", alpha=0.5, linewidth=0.5 , inherit.aes = FALSE )+  # 添加文本表示(20/40/60/80)表示每条线的大小  annotate("text", x = rep(max(stuper$id),4), y = c(20, 40, 60, 80),            label = c("20", "40", "60", "80") , color="black", size=3,           angle=0, hjust=1) +  ylim(-100,120) + ## 设置y轴坐标表的取值范围,可流出更大的圆心空白  ## 设置使用的主题并使用极坐标系可视化条形图  theme_minimal() +  theme(legend.position = "none", # 不要图例        axis.text = element_blank(),# 不要x轴的标签        axis.title = element_blank(), # 不要坐标系的名称        panel.grid = element_blank(), # 不要网格线        plot.margin = unit(rep(-1,4), "cm"))+ ## 整个图与周围的边距  coord_polar() + ## 极坐标系  ## 为条形图添加文本  geom_text(data=label_data,             aes(x=id, y=value+5, label=individual,hjust=hjust),            color="black",fontface="bold",alpha=0.8, size=2.5,             angle= label_data$angle, inherit.aes = FALSE) +  # 为图像添加基础线的信息  geom_segment(data=base_data, aes(x = start, y = -5, xend = end, yend = -5),               colour = "black", alpha=0.8, size=0.6 , inherit.aes = FALSE )+  ## 添加分组文本信息  geom_text(data=base_data, aes(x = title, y = -18, label=group),alpha=0.8,            colour = "black", size=4,fontface="bold", inherit.aes = FALSE)p1

加上汉字的正常显示:

library(showtext)## 使用Windows自带字体font_add("heiti", "simhei.ttf")font_add("constan", "constan.ttf", italic = "constani.ttf"

图片

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

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

相关文章

电脑连不上网?学会这5个方法,不用愁!

“怎么回事呢&#xff1f;我的电脑一直连不上网。尝试了好多个方法都还是不行。大家遇到这种情况的时候都是怎么处理的呀&#xff1f;” 在现代生活中&#xff0c;电脑连接到网络已经成为必不可少的一部分。如果电脑无法联网&#xff0c;可能会影响我们的工作和娱乐。那么&…

Scrum敏捷研发迭代式开发

Scrum是一个迭代式增量软件开发过程&#xff0c;是敏捷方法论中的重要框架之一。它通常用于敏捷软件开发&#xff0c;包括了一系列实践和预定义角色的过程骨架。Scrum中的主要角色包括Scrum主管&#xff08;Scrum Master&#xff09;、产品负责人&#xff08;Product Owner&…

【已解决】ZooKeeper配置中出现Error contacting service. It is probably not running

ZooKeeper配置中出现Error contacting service. It is probably not running 问题 安装zookeeper&#xff0c;启动报错了 Error contacting service. It is probably not running 思路 tail -100f logs/zookeeper-root-server-node1.itcast.cn.out 查看日志报错 zoo.cfg没…

LinuxShell变量

变量&#xff1a; 命名规则&#xff1a; 在Shell中&#xff0c;变量名可以由字母、数字或者下划线组成&#xff0c;并且只能以字母或者下划线开头。对于变量名的长度&#xff0c;Shell并没有做出明确的规定。因此&#xff0c;用户可以使用任意长度的字符串来作为变量名。但是…

算法:模拟思想算法

文章目录 实现原理算法思路典型例题替换所有问号提莫攻击N字型变换外观序列 总结 本篇总结的是模拟算法 实现原理 模拟算法的实现原理很简单&#xff0c;就是依据题意实现题意的目的即可&#xff0c;考察的是你能不能实现题目题意的代码能力 算法思路 没有很明显的算法思路…

模拟集成电路设计:Bandgap电路设计及版图实现

模拟集成电路设计 Bandgap电路设计及版图实现 一、目的&#xff1a; 1、熟悉模拟集成电路设计的基本流程&#xff0c;实现Bandgap电路设计&#xff1b; 2、熟悉Linux系统及Cadence Virtuoso icfb设计、仿真软件的使用方法。 二、原理&#xff1a; 1、设计目标&#xff1a;…

【HSPCIE仿真】输入网表文件(2)电路拓扑描述

电路拓扑描述 1.元器件描述语句(Elements)电阻(Resistor)电容(Capacitors)电感(Inductors)二极管(Diode)MOSFET 2. 模型(.MODEL)2.1 基本概念2.2 模型的使用.model 描述语句MOSFET的 .model 语句 3. 电源和激励描述语句3.1 独立源直流源梯形脉冲源Pattern Source 4. 库文件的调…

SpringBoot初级开发--加入Swagger展现接口文档(5)

Swagger 是一个规范且完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。作为web开发&#xff0c;它已经成了接口文档服务的代名词了。现在很多协作型项目&#xff0c;都用它生成api文档&#xff0c;让大家能够很好的协作开发。紧接上一章&#xf…

液冷技术之液冷连接器快速接头

文章目录 系列文章目录前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 热能在液冷技术的研发不断加大&#xff0c;特别是在水冷产品生产工艺上不断革新&#xff0c;在铜管自动折弯、挤型模、压管、粘连焊接等技术工艺获得了多个技术专利&#xff0…

php环境搭建步骤(与资源配套使用版)

1.将phpEnv.zip下载到D盘下 2.解压到当前文件夹 3.找到Apache24下的bin目录&#xff0c;执行cmd操作&#xff0c;回车。 4.在cmd中执行代码 Httpd -k install -n “Apache24” 4.使用winR键打开运行&#xff0c;输入services.msc &#xff0c;回车&#xff0c;进入服务 …

Java运行时jar时终端输出的中文日志是乱码

运行Jar时在控制台输出的中文日志全是乱码&#xff0c;这是因为cmd/bash默认的编码是GBK&#xff0c;只要把cmd的编码改成UTF-8即可 两种方式修改&#xff1a;临时修改和注册表永久修改 临时修改 只对当前的cmd页面有效&#xff0c;关闭后重新打开都会恢复成GBK, 打开cmd&am…

“私车公用”如何便捷又合规?百望云解决方案来支招!

“昨天有几家门店反映工作中遇到难题了&#xff0c;领导交代我赶紧去解答一下”。中午11点半&#xff0c;某大型连锁门店的督导李某顾不上吃午饭&#xff0c;开着自己的私家车赶往辖区门店。 去干公事怎么开私家车&#xff1f;面对同行人员的疑问&#xff0c;李某拿出了自己的…

Total Uninstall - 如何将程序从一台计算机传输到另一台计算机

Total Uninstall 可以帮助传输或部署程序 将程序传输到新计算机。将难以找到的程序及其设置移动到新 PC。它可以在多台计算机上安装预先配置了相同设置的程序。使用一组基本的必备程序制作备份副本。重新安装 Windows 时&#xff0c;节省安装和配置应用程序的时间。只需还原备…

超详细FPGA新手小白入门点亮LED灯

Vivado软件的基本操作&#xff08;以控制LED灯闪烁为例&#xff09; 其实之前早已用过Vivado进行FPGA的开发学习&#xff0c;但由于每次都是浅尝辄止地学了一些时间&#xff0c;加上Vivado软件和FPGA开发流程的复杂性&#xff0c;长时间不用就会遗忘。因此今天还是简单地写个笔…

空气净化器十大排名哪个除甲醛强 空气净化器品牌评测

空气净化器十大排名哪个除甲醛强 空气净化器品牌评测 十大空气净化器品牌评测&#xff0c;寻找最强除甲醛功效 房源里无时无刻不承载着我们的生活&#xff0c;我们的家庭在这个小小的空间里扎根&#xff0c;亲人的温暖也凝结其中。然而&#xff0c;室内空气污染却可能悄然渗透&…

Django基础7——用户认证系统、Session管理、CSRF安全防护机制

文章目录 一、用户认证系统二、案例&#xff1a;登陆认证2.1 平台登入2.2 平台登出2.3 login_required装饰器 三、Django Session管理3.1 Django使用Session3.1.1 Cookie用法3.1.2 Session用法 3.2 案例&#xff1a;用户登录认证 四、Django CSRF安全防护机制 一、用户认证系统…

Java-内部类:成员内部类、局部内部类、匿名内部类、静态内部类

文章目录 Java中的内部类一、成员内部类1. 成员内部类是什么&#xff1f;2. 为什么要使用成员内部类&#xff1f;3. 在哪里使用&#xff08;场景&#xff09;4. 优缺点5. 成员内部类示例代码 二、局部内部类1. 是什么&#xff1a;2. 为什么使用3. 在哪里使用4. 优缺点5. 局部内…

喜讯!哲讯科技荣获第八届“创客中国”无锡区域赛优胜奖

第八届“创客中国”暨2023年江苏省中小企业创新创业大赛无锡市区域赛于8月23日在无锡人才金融港路演厅举行。作为全国性扶持中小企业发展的重量级大赛之一&#xff0c;“创客中国”中小企业创新创业大赛一直备受行业瞩目。本次大赛以“围绕产业链、部署创新链、配置资金链、汇聚…

第五讲Java面向对象——类及类的成员

前言 前面几讲,我们讲解了java的基础知识,也写了很多代码,有没有发现,每次编写代码前都会新建一个类,并且开头是public class修饰。可能有些同学不知道什么是类,以及前面我们提到方法。那么本讲,就要开始深入了解他们。 在开始讲解,我们将先了解一下编程的思想,面向对…

超简单演示Android地图开发应用实例

概述 手机地图开发应用广泛&#xff0c;本实例演示了在手机上显示各种地图的方法。比如3D矢量地图、卫星地图、交通地图、夜景地图等在手机上的显示。可以根据手势自由做地图缩放&#xff0c;地图旋转等操作。代码简洁、实用&#xff0c;可以帮助你快速上手地图开发。 详细 …