利用R作圆环条形图

图片

从理念上看,本质就是增加了圆环弧度的条形图。如上图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.mzph.cn/news/60044.shtml

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

相关文章

UDP 多播(组播)

前言&#xff08;了解分类的IP地址&#xff09; 1.组播&#xff08;多播&#xff09; 单播地址标识单个IP接口&#xff0c;广播地址标识某个子网的所有IP接口&#xff0c;多播地址标识一组IP接口。单播和广播是寻址方案的两个极端&#xff08;要么单个要么全部&#xff09;&am…

Sentinel —实时监控

Sentinel 提供对所有资源的实时监控。如果需要实时监控&#xff0c;客户端需引入以下依赖&#xff08;以 Maven 为例&#xff09;&#xff1a; <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-transport-simple-http</artif…

AI聊天机器人平台Poe发布更新;自然语言理解课程概要

&#x1f989; AI新闻 &#x1f680; AI聊天机器人平台Poe发布更新 突破功能限制 增加企业级服务 摘要&#xff1a;知名问答网站Quora旗下的AI聊天机器人平台Poe发布了一系列更新&#xff0c;包括推出Mac应用、支持同时进行多个对话、接入Meta的Llama 2模型等功能。用户只需支…

Flutter 生成小程序的混合 App 实践

一、背景 微信小程序发展的越来越快,目前小程序甚至取代了大部分 App 的生态位,公司的坑位不增反降,只能让原生应用开发兼顾或换岗进行小程序的开发。 以我的实际情况来讲,公司应用采用的 Flutter 框架,同样的功能不可避免的就会存在 Flutter 应用开发和微信小程序开发兼…

自动化运维:Ansible之playbook基于ROLES部署LNMP平台

目录 一、理论 1.playbook剧本 2.ROLES角色 3.关系 4.Roles模块搭建LNMP架构 二、实验 1.Roles模块搭建LNMP架构 三、问题 1.剧本启动php报错语法问题 2.剧本启动mysql报错语法问题 3.剧本启动nginx开启失败 4.剧本安装php失败 5.使用yum时报错 6.rpm -Uvh https…

自动泊车的自动驾驶控制算法

1. 自动泊车系统 自动泊车系统(AutomatedParkingASSiSt,APA)利用车辆搭载的传感器感知车辆周边环境,扫描满足当前车辆停放的障碍物空间车位或线车位,并通过人机交互(HumanMachine Interface,HMI)获取驾驶员对目标车位的选择或自动确定目标车位,自动规划泊车路径,通过控制器向车…

windows环境搭建ELK

目录 资源下载&#xff08;8.9.1&#xff09; ES安装、注册、使用 Kibana安装、注册、使用 Logstash安装、注册、使用 Filebeat安装、使用&#xff08;如果只有一个数据流&#xff0c;则不需要使用filebeat&#xff0c;直接上logstash即可&#xff09; 资源下载&#xff0…

arcmap 在oracle删除表重新创建提示表名存在解决放啊

sde表创建是有注册或者是关联关系存在的 按照以下步骤删除表的数据 select t.* from sde.TABLE_REGISTRY t where table_name like IRR%; DELETE from sde.TABLE_REGISTRY where table_nameIRRIGATION_TYPE; select t.* from sde.LAYERS t where table_name like IRR%; DELET…

WebSocket--技术文档--架构体系--《WebSocket实现原理以及关键组件》

WebSocket产生背景 简单的说&#xff0c;WebSocket协议之前&#xff0c;双工通信是通过多个http链接来实现&#xff0c;这导致了效率低下。WebSocket解决了这个问题。下面是标准RFC6455中的产生背景概述。 长久以来, 创建实现客户端和用户端之间双工通讯的web app都会造成HTT…

配置开启Hive远程连接

配置开启Hive远程连接 Hive远程连接默认方式远程连接Hive自定义身份验证类远程连接Hive权限问题额外说明 Hive远程连接 要配置Hive远程连接&#xff0c;首先确保HiveServer2已启动并监听指定的端口 hive/bin/hiveserver2检查 HiveServer2是否正在运行 # lsof -i:10000 COMMA…

docker 搭建rknn转换环境

文章目录 下载rknn搭建docker 环境进入镜像并挂载运行代码 下载rknn https://github.com/rockchip-linux/rknn-toolkit2 搭建docker 环境 进入到docker 的文件目录下 docker build -t run:v3 . -f Dockerfile_ubuntu_18_04_for_cp36 进入镜像并挂载 docker run -it -v /ho…

详解 ElasticSearch Kibana 配置部署

默认安装部署所在机器允许外网 SSH工具 Putty 链接&#xff1a;https://pan.baidu.com/s/1b6gumtsjL_L64rEsOdhd4A 提取码&#xff1a;lxs9 Winscp 链接&#xff1a;https://pan.baidu.com/s/1tD8_2knvv0EJ5OYvXP6VTg 提取码&#xff1a;lxs9 WinSCP安装直接下一步到完成…

elementUi中的el-table表格的内容根据后端返回的数据用不同的颜色展示

效果图如下&#xff1a; 首先 首先&#xff1a;需要在表格行加入 <template slot-scope"{ row }"> </template>标签 <el-table-column prop"usable" align"center" label"状态" width"180" ><templ…

LeetCode——最大子数组和(中等)

题目 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 子数组 是数组中的一个连续部分。 示例 1&#xff1a; 输入&#xff1a;nums [-2,1,-3,4,-1,2,1,-5,4] 输出&#x…

ELK安装、部署、调试 (二) ES的安装部署

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口操作ES&#xff0c;也可以利用Java API。Elasticsearch是用Java开发的&#xff0c;并作为Apache许可条款下的开放源码发布&#xff0c;是当前流行的企业…

C. Divisor Chain Harbour.Space Scholarship Contest 2023-2024 (Div. 1 + Div. 2)

Problem - C - Codeforces 题目大意&#xff1a;给出一个数k&#xff0c;每次操作可以选择当前k的一个因数x&#xff0c;并令kk-x&#xff0c;要求令k变成1&#xff0c;且相同的x 出现次数不超过2&#xff0c;最大操作次数1000 2<k<1e9 思路&#xff1a;因为每个数的l…

Linux 桌面上的 Firefox 面临着大问题

导读毫无疑问&#xff0c;无论是在桌面、笔记本电脑还是移动设备上&#xff0c;浏览器都是任何操作系统中最重要的应用之一。 如果没有一个功能强大、快速且稳定的浏览器&#xff0c;操作系统的实用性将大幅度降低&#xff0c;以至于我相当确定&#xff0c;如果一个操作系统没有…

十年JAVA搬砖路——软件工程概述

软件工程是一门关注软件开发过程的学科&#xff0c;它涉及到软件的设计、开发、测试、部署和维护等方面。软件工程的目标是通过系统化的方法和工具&#xff0c;以确保软件项目能够按时、按预算和按要求完成。 **• 软件工程的7个基本概念&#xff1a; ** **1. 软件生命周期&…

在阿里云请求发短信接口去掉证书验证

composer require alibabacloud/dysmsapi-20170525 2.0.23 cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://dysmsapi.aliyuncs.com/?PhoneNumbers 两种方法 第一…

Mysql的page,索引,Explain Type等基本常识

Mysql的基本问题 Mysql 为什么建议使用自增id&#xff1f; 因为id&#xff08;主键&#xff09;是自增的话&#xff0c;那么在有序的保存用户数据到页中的时候&#xff0c;可以天然的保存&#xff0c;并且是在聚集索引&#xff08;id&#xff09;中的叶子节点可以很好的减少插…