查看原文
其他

【孙老湿画图系列--第六弹】 饼图 Pie Graph

孙怀博 生信者言 2022-03-29


饼图,苏格兰政治经济学作家WilliamPlayfair(1759 – 1823)在1801年为了展示土耳其帝国领域面积时首次使用,如上图。


普莱菲也被称为「视觉图表之父」,他所制定的直方图、线图、圆饼图,影响后世至巨。

 

饼图显示的是数据中各项的大小与各项总和的比例,它的数据有以下几个要求:


     1.       仅有一个要绘制的数据系列

     2.       要绘制的数值没有负值

     3.       要绘制的数值几乎没有零值

     4.       类别数目无限制

     5.       各个部分代表的是百分比

 

在R是绘制饼图有很多种方法,比如基础函数pie()、plotrix包中的pie3D()函数绘制3D饼图、以及ggplot2等都可以实现饼图的绘制,相比而言ggplot绘制饼图略微复杂一点,接下来将对这三种方法一一作一介绍。


R的基础函数pie()绘制饼图,常用参数如下:


x

用于绘图的数据

labels

数据对应的标签

radius

半径

col

设定颜色

clockwise

逻辑值,TRUE为顺时针,FALSE为逆时针

 

模拟数据x(必须是各个部分的比例),给定标签,设定颜色color(也可以使用默认颜色,但一般不是很好看):

x <- c(0.24, 0.3, 0.26, 0.16, 0.04)

y <- c("A","B","C", "D", "Others")

color <- c("#1B9E77","#D95F02", "#7570B3", "#E7298A","#B3B3B3")

pie(x, labels = y, col = color)

 

plotrix包中的pie3D(),基本参数如下:


x

用于绘图的数据

labels

数据对应的标签

radius

半径

col

设定颜色

theta

设定倾斜程度

 

首先模拟数据x(必须是各个部分的比例),给定标签,其次设定颜色color(也可以使用默认颜色,一般不是很好看)

install.packages("plotrix")

library("plotrix")

pie3D(x, labels = y, col = color, theta =0.5)


ggplot2种绘制饼图,其实是把柱形图做了一次极坐标转换coord_polar(),柱形图绘制可参见另一篇文章《如何用R画一个柱状图,代码都在这里了》


1、如果我们柱形图是并列式,并按照x轴极化坐标轴,会绘制出类似雷达图coord_polar(theta = "x")

library(ggplot2)

df <- data.frame(x, y)

df$Gr <- "Group"

 

p <- ggplot(df, aes(y, x, fill = y)) +

   geom_bar(stat = "density") +

    coord_polar(theta ="x")

p


2、绘制正宗的饼图,需要先绘制叠加的柱形图,然后在y轴加极坐标转换coord_polar(theta = "y")

p <- ggplot(df, aes(Gr, x, fill = y)) +

   geom_bar(stat = "density", width = 1, position= "fill") +

    coord_polar(theta = "y") +

   theme_bw() +

   theme(axis.text = element_blank(),

         axis.title = element_blank(),

         panel.grid = element_blank(),

         panel.border = element_blank())

p

 


3、在ggplot中还可以借鉴饼图的思路,绘制环形图,每一环代表一个分组:

模拟数据:

specie <- c(rep("sorgho" , 3), rep("poacee" , 3) , rep("banana" , 3) ,rep("triticum" , 3) )

condition <- rep(c("normal" ,"stress" , "Nitrogen") , 4)

value <- abs(rnorm(12 , 0 , 15))

data <- data.frame(specie,condition,value)

head(data)



绘制代码:

p <- ggplot(data, aes(x=specie,  y=value, fill=condition)) +

   geom_bar(stat="identity", position="fill", width =0.9) +

   theme_bw() +

   theme(axis.title = element_blank(),

         axis.text.x = element_blank(),

         plot.title = element_text(hjust = 0.5, size = 20),

         panel.grid = element_blank()) +

   coord_polar(theta = "y")

p

本系列课程主要侧重于讲解图形原理,以及在R中的实现过程,并没有特意追求美观,故很多图的细节部分修饰有限,大家重点理解实现过程。

 

本期图饼就分享到这里。不知不觉【孙老湿画图系列】已经和小伙伴们分享了六期,你是不是自己也进行了练习了呢?有任何问题欢迎留言和孙老湿沟通~~


下一期的内容是如何进行颜色设置,本周六,孙老湿与你不见不散!



    编辑:Anymore    作者:孙怀博    

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存