1.什么是饼图/甜甜圈图?

在工作中如果遇到需要计算总费用或金额的各个部分构成比例的情况,一般都是通过各个部分与总额相除来计算,而且这种比例表示方法单看数字很抽象,我们可以使用一种饼形图表,能够直接以图形的方式直接显示各个组成部分所占比例,更加形象直观。

饼图,是指使用圆形及圆内扇形的面积来表示数值大小的图形,其一般用于表示总体中各部分所占的比例。

甜甜圈图(圆环图),其本质是将饼图的中间区域挖空。虽然如此,甜甜圈图还是有其优点的。饼图的整体性太强,会让我们将注意力集中在比较饼图内各个扇形之间占整体比重的关系。但如果我们将两个饼图放在一起,则很难同时对比两个图。甜甜圈图在解决上述问题时,采用了让我们更关注长度而不是面积的做法。这样我们就能相对简单地对比不同的甜甜圈图。

本文我们就来讨论一下饼图/甜甜圈图是如何绘制的以及如何对其进行解读。

2.绘图前的数据准备

​ demo数据可以在https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/Pie/data.csv下载。

包含2列数据,第一列是名称,第二列是数值。

3. R语言怎么画饼图/甜甜圈图

3.1 饼图

# 加载R包,没有安装请先安装  install.packages("包名")
library(graphics)# 读取饼图/甜甜圈图数据文件
df= read.delim("https://www.bioladder.cn/shiny/zyp/bioladder2/demoData/Pie/data.csv",# 这里读取了网络上的demo数据,将此处换成你自己电脑里的文件sep = "," # 因为文件为csv格式,所以分隔符设置为","逗号
)   # 设置标签样式(名称+百分比+原数值)
labs <- paste0(df$group," \n(", round(df$value/sum(df$value)*100,2), "%)"," \n(",df$value, ")")# 绘图
pie(df$value,labels=labs, init.angle=90,    # 设置初始角度col = rainbow(length(df$value)) , # 设置颜色 border="white",   # 边框颜色 cex = 1)          # 字体大小

3.2 甜甜圈图

# 并没有直接画甜甜圈图的R包,所以在饼图源代码的基础上改改
doughnut <- function (x, labels = names(x), edges = 200, outer.radius = 0.8,inner.radius=0.6, clockwise = FALSE,init.angle = if (clockwise) 90 else 0, density = NULL,angle = 45, col = NULL, border = FALSE, lty = NULL,main = NULL, ...)
{if (!is.numeric(x) || any(is.na(x) | x < 0))stop("'x' values must be positive.")if (is.null(labels))labels <- as.character(seq_along(x))else labels <- as.graphicsAnnot(labels)x <- c(0, cumsum(x)/sum(x))dx <- diff(x)nx <- length(dx)plot.new()pin <- par("pin")xlim <- ylim <- c(-1, 1)if (pin[1L] > pin[2L])xlim <- (pin[1L]/pin[2L]) * xlimelse ylim <- (pin[2L]/pin[1L]) * ylimplot.window(xlim, ylim, "", asp = 1)if (is.null(col))col <- if (is.null(density))palette()else par("fg")col <- rep(col, length.out = nx)border <- rep(border, length.out = nx)lty <- rep(lty, length.out = nx)angle <- rep(angle, length.out = nx)density <- rep(density, length.out = nx)twopi <- if (clockwise)-2 * pielse 2 * pit2xy <- function(t, radius) {t2p <- twopi * t + init.angle * pi/180list(x = radius * cos(t2p),y = radius * sin(t2p))}for (i in 1L:nx) {n <- max(2, floor(edges * dx[i]))P <- t2xy(seq.int(x[i], x[i + 1], length.out = n),outer.radius)polygon(c(P$x, 0), c(P$y, 0), density = density[i],angle = angle[i], border = border[i],col = col[i], lty = lty[i])Pout <- t2xy(mean(x[i + 0:1]), outer.radius)lab <- as.character(labels[i])if (!is.na(lab) && nzchar(lab)) {lines(c(1, 1.05) * Pout$x, c(1, 1.05) * Pout$y)text(1.1 * Pout$x, 1.1 * Pout$y, labels[i],xpd = TRUE, adj = ifelse(Pout$x < 0, 1, 0),...)}      Pin <- t2xy(seq.int(0, 1, length.out = n*nx),inner.radius)polygon(Pin$x, Pin$y, density = density[i],angle = angle[i], border = border[i],col = "white", lty = lty[i])}title(main = main, ...)invisible(NULL)
}# 绘图
doughnut(df$value,labels=labs, init.angle=90,     # 设置初始角度col = rainbow(length(df$value)) , # 设置颜色 border="white",    # 边框颜色 inner.radius= 0.4, # 内环大小cex = 1)           # 字体大小

4. BioLadder生信云平台在线绘制饼图/甜甜圈图

不想写代码?可以用BioLadder生信云平台在线绘制饼图/甜甜圈图。

饼图网址:https://www.bioladder.cn/web/#/chart/38

甜甜圈图网址:https://www.bioladder.cn/web/#/chart/39

5. 饼图/甜甜圈图结果解读

饼图/甜甜圈图都是用比例显示数值大小的图形。数值越高,该组别所占的比例。

甜甜圈图本质是将饼图的中间区域挖空

R语言如何绘制饼图/甜甜圈图(15)相关推荐

  1. R语言使用ggplot2可视化甜甜圈图(Donut chart)

    R语言使用ggplot2可视化甜甜圈图(Donut chart) 目录 R语言使用ggplot2可视化甜甜圈图(Donut chart) #仿真数据

  2. R语言可视化绘制基本图形

    R语言可视化绘制基本图形 简单条形图: 堆叠条形图分组条形图: 均值条形图与条形图的微调: spinogram图 饼图.直方图.密度图.箱图.小提琴图.线图.散点图: # Listing 6.1 - ...

  3. R语言可视化绘制及PDF使用字体参数列表:查看字体列表、可视化绘制图像中的字体参数列表、字体示例并写入pdf

    R语言可视化绘制及PDF使用字体参数列表:查看字体列表.可视化绘制图像中的字体参数列表.字体示例并写入pdf 目录 R语言可视化绘制及PDF使用字体参数列表:查看字体列表.可视化绘制图像中的字体参数列 ...

  4. R语言Kaplan-Meier绘制生存分析、Log-rank假设检验、Cox回归曲线实战案例:恶性黑色素瘤的术后数据生存分析

    R语言Kaplan-Meier绘制生存分析.Log-rank假设检验.Cox回归曲线实战案例:恶性黑色素瘤的术后数据生存分析 目录

  5. 【R语言 | 如何绘制带组内差异比较的柱形图】

    R语言 | 如何绘制带组内差异比较的柱形图 参考链接:R语言 | 如何绘制带组内差异比较的柱形图 结果如下: 代码如下: install.packages(ggpubr)//内置的包不需要安装 ins ...

  6. R语言ggplot绘制地图-报错汇总(一)

    R语言ggplot绘制地图-报错汇总 报错两例 报错1: 报错2: 报错两例 在用ggplot绘制地图时出现了两个报错,网上搜索了没有相关说明,虽然解决方式很蠢,但是可能对于出现同样报错的人会有帮助, ...

  7. 如何使用 R 语言来绘制图表和图(曲线等)

    前言 如果你是学习或者从事数据分析相关的专业,那么你一定使用过或者被告知要使用 R 语言.但是有那么多可以数据分析的语言,为什么要使用 R 呢?因为 R 可以输出非常好的可以出版的图像,对于博客可能不 ...

  8. r语言做绘制精美pcoa图_科学网—R语言 PCA PCoA ggplot2 - 靳泽星的博文

    这一篇是衔接上一篇的,就是要用ggplot2程序包对PCA和PCoA进行可视化.代码我直接照搬过来了,只是绘图的时候用ggplot函数.ggplot2包实现了一个在R中基于全面一致的语法创建图形时的系 ...

  9. r语言做绘制精美pcoa图_三分钟绘制一张优美的PCoA图 | 云平台

    本文主要为您迅速绘制一张优美的PCoA图提供步骤指导(1-4要点),另附细节优化方法(5及之后的要点),可后期慢慢研究调整,同时提供相关分析方法说明和参考文献,为您深入了解提供支持. 1.了解输入数据 ...

最新文章

  1. repeater实现删除按钮
  2. ad域时间源配置_Windows网络服务与配置管理之活动目录学习
  3. 几个ARX取CAD窗口句柄的函数
  4. Spring - Java/J2EE Application Framework 应用框架
  5. sqoop 增量导入mysql_sqoop增量导入数据库
  6. java(2)——字面常量和变量,变量的作用域,局部变量,成员变量
  7. 生成一个文件 保存在指定的文件夹中 思路 python
  8. 华为商城抢手机软件_华为p40配置详细参数
  9. java手动调用finalize_Java并手动执行finalize
  10. php抽奖设置数量,php实现自定义中奖项数和概率的抽奖函数示例
  11. 修改了JS代码,刷新网页后,加载的JS还是原来旧的?
  12. 《高等代数学》(姚慕生),习题1.2:三阶行列式
  13. [CISCN2019 总决赛 Day2 Web1]Easyweb
  14. Linux操作系统引导过程及MBR扇区故障解决
  15. eslint: globals
  16. 单点登录SSO:可一键运行的完整代码
  17. JPEG压缩中质量因子和量化矩阵之间的关联
  18. OGRE里,MAYA模型导出MESH格式模型方法
  19. 2021年房地产金融行业发展研究报告
  20. codewars练习js2021/5/67891026

热门文章

  1. Python入门学习day05--龙腾数
  2. IDEA的下载与安装
  3. k3客户端连接虚拟服务器如何设置,k3金蝶客户端连接服务器配置
  4. Python常用数据结构(列表、元组、字典、集合)
  5. 成熟的软件组件都是老板用大把、大把的钱堆出来烧出来的,以最简单的数据库访问组件为例...
  6. Theano简单入门(一):Theano与Lasagne的安装
  7. 图书室管理系统--UML用例图、竞品分析文档
  8. axios请求mysql_接收post请求(vue+axios)解决跨域问题(三)
  9. 基地树洞 |如何用selenium解决生活中的烦恼?
  10. javascript实现继承的七种方式(from 红宝书)