ggplot2——饼图篇

目录:

  • 原始图样
  • 如何去除饼图中心的杂点
  • 如何去除饼图旁边的标签
  • 如何去掉左上角多出来的一横线
  • 如何去掉图例的标题,并将图例放到上面
  • 如何对图例的标签加上百分比
  • 如何让饼图的小块按顺时针从大到小的顺序显示
  • 如何去掉白色外框上的数字
  • 如何在图中加百分比
  • 如何生成饼环

(更多内容请见:R、ggplot2、shiny 汇总

原始图样:

library(ggplot2)
dt = data.frame(A = c(2, 7, 4, 10, 1), B = c(‘B‘,‘A‘,‘C‘,‘D‘,‘E‘))
p = ggplot(dt, aes(x = "", y = A, fill = B)) +
  geom_bar(stat = "identity") +
  coord_polar(theta = "y")   ## 把柱状图折叠成饼图(极坐标)
p

如何去除饼图中心的杂点:

library(ggplot2)
dt = data.frame(A = c(2, 7, 4, 10, 1), B = c(‘B‘,‘A‘,‘C‘,‘D‘,‘E‘))
p = ggplot(dt, aes(x = "", y = A, fill = B)) +
  geom_bar(stat = "identity", width = 1) +    ## width >= 1 时中心的杂点将消失
  coord_polar(theta = "y")
p

如何去除饼图旁边的标签:

library(ggplot2)
dt = data.frame(A = c(2, 7, 4, 10, 1), B = c(‘B‘,‘A‘,‘C‘,‘D‘,‘E‘))
p = ggplot(dt, aes(x = "", y = A, fill = B)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar(theta = "y") +
  labs(x = "", y = "", title = "")   ## 将标签设为空
p

如何去掉左上角多出来的一横线:

library(ggplot2)
dt = data.frame(A = c(2, 7, 4, 10, 1), B = c(‘B‘,‘A‘,‘C‘,‘D‘,‘E‘))
p = ggplot(dt, aes(x = "", y = A, fill = B)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar(theta = "y") +
  labs(x = "", y = "", title = "") +
  theme(axis.ticks = element_blank())   ## 把左上角多出来的“小胡子”去掉
p

如何去掉图例的标题,并将图例放到上面:

library(ggplot2)
dt = data.frame(A = c(2, 7, 4, 10, 1), B = c(‘B‘,‘A‘,‘C‘,‘D‘,‘E‘))
p = ggplot(dt, aes(x = "", y = A, fill = B)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar(theta = "y") +
  labs(x = "", y = "", title = "") +
  theme(axis.ticks = element_blank()) +
  theme(legend.title = element_blank(), legend.position = "top")   ## 将图例标题设为空,并把土方放在上方
p

如何对图例的标签加上百分比:

library(ggplot2)
dt = data.frame(A = c(2, 7, 4, 10, 1), B = c(‘B‘,‘A‘,‘C‘,‘D‘,‘E‘))

myLabel = as.vector(dt$B)   ## 转成向量,否则图例的标签可能与实际顺序不一致
myLabel = paste(myLabel, "(", round(dt$A / sum(dt$A) * 100, 2), "%)        ", sep = "")   ## 用 round() 对结果保留两位小数

p = ggplot(dt, aes(x = "", y = A, fill = B)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar(theta = "y") +
  labs(x = "", y = "", title = "") +
  theme(axis.ticks = element_blank()) +
  theme(legend.title = element_blank(), legend.position = "top") +
  scale_fill_discrete(breaks = dt$B, labels = myLabel)   ## 将原来的图例标签换成现在的myLabel
p

如何让饼图的小块按顺时针从大到小的顺序显示:

library(ggplot2)
dt = data.frame(A = c(2, 7, 4, 10, 1), B = c(‘B‘,‘A‘,‘C‘,‘D‘,‘E‘))

dt = dt[order(dt$A, decreasing = TRUE),]   ## 用 order() 让数据框的数据按 A 列数据从大到小排序
myLabel = as.vector(dt$B)
myLabel = paste(myLabel, "(", round(dt$A / sum(dt$A) * 100, 2), "%)        ", sep = "")   

p = ggplot(dt, aes(x = "", y = A, fill = B)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar(theta = "y") +
  labs(x = "", y = "", title = "") +
  theme(axis.ticks = element_blank()) +
  theme(legend.title = element_blank(), legend.position = "top") +
  scale_fill_discrete(breaks = dt$B, labels = myLabel)
p

如何去掉白色外框上的数字:

library(ggplot2)
dt = data.frame(A = c(2, 7, 4, 10, 1), B = c(‘B‘,‘A‘,‘C‘,‘D‘,‘E‘))

dt = dt[order(dt$A, decreasing = TRUE),]   ## 用 order() 让数据框的数据按 A 列数据从大到小排序
myLabel = as.vector(dt$B)
myLabel = paste(myLabel, "(", round(dt$A / sum(dt$A) * 100, 2), "%)        ", sep = "")   

p = ggplot(dt, aes(x = "", y = A, fill = B)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar(theta = "y") +
  labs(x = "", y = "", title = "") +
  theme(axis.ticks = element_blank()) +
  theme(legend.title = element_blank(), legend.position = "top") +
  scale_fill_discrete(breaks = dt$B, labels = myLabel) +
  theme(axis.text.x = element_blank())   ## 白色的外框即是原柱状图的X轴,把X轴的刻度文字去掉即可
p

如何在图中加百分比:

library(ggplot2)
dt = data.frame(A = c(2, 7, 4, 10, 1), B = c(‘B‘,‘A‘,‘C‘,‘D‘,‘E‘))

dt = dt[order(dt$A, decreasing = TRUE),]
myLabel = as.vector(dt$B)
myLabel = paste(myLabel, "(", round(dt$A / sum(dt$A) * 100, 2), "%)", sep = "")   

p = ggplot(dt, aes(x = "", y = A, fill = B)) +
  geom_bar(stat = "identity", width = 1) +
  coord_polar(theta = "y") +
  labs(x = "", y = "", title = "") +
  theme(axis.ticks = element_blank()) +
  theme(legend.title = element_blank(), legend.position = "top") +
  scale_fill_discrete(breaks = dt$B, labels = myLabel) +
  theme(axis.text.x = element_blank()) +
  geom_text(aes(y = A/2 + c(0, cumsum(A)[-length(A)]), x = sum(A)/20, label = myLabel), size = 5)   ## 在图中加上百分比:x 调节标签到圆心的距离, y 调节标签的左右位置
p

如何生成饼环:

library(ggplot2)
dt = data.frame(A = c(2, 7, 4, 10, 1), B = c(‘B‘,‘A‘,‘C‘,‘D‘,‘E‘))

dt = dt[order(dt$A, decreasing = TRUE),]
myLabel = as.vector(dt$B)
myLabel = paste(myLabel, "(", round(dt$A / sum(dt$A) * 100, 2), "%)", sep = "")   

p = ggplot(dt, aes(x = "", y = A, fill = B)) +
  geom_bar(stat = "identity", width = 0.3) +    ## 当width < 1 时饼图将变成饼环
  coord_polar(theta = "y") +
  theme_bw() +
  labs(x = "", y = "", title = "") +
  theme(axis.ticks = element_blank()) +
  theme(legend.position = "none") +
  theme(axis.text.x = element_blank()) +
  geom_text(aes(y = A/2 + c(0, cumsum(A)[-length(A)]), x = sum(A)/24, label = myLabel), size = 5)
p

版权声明:转载请注明出处,谢谢!

时间: 2024-10-10 18:11:47

ggplot2——饼图篇的相关文章

ggplot2——坐标系篇

目录: 初始图样 修改坐标轴的显示范围 修改坐标轴的标签(内容.大小.字体.颜色.加粗.位置.角度) 修改坐标轴刻度的文字(大小.字体.颜色.加粗.位置.角度) 修改坐标轴刻度文字的内容 修改坐标轴的刻度间隔 (更多内容请见:R.ggplot2.shiny 汇总) 初始图样: library(ggplot2) dt = data.frame(A = 1:10, B = c(2,15,6,18,9,7,13,15,10,3), C = c('A','C','A','B','C','D','A','

ggplot2——主题篇

如何插入主题? 方法一: library(ggplot2) set.seed(2015) diamond.part<-diamonds[sample(nrow(diamonds),100),] b = ggplot(diamond.part, aes(x = carat, y = price)) + geom_point(aes(colour = color)) b + theme_grey() 方法二: library(ggplot2) set.seed(2015) diamond.part<

ggplot2——图例篇

目录: ggplot2中图例基础 如何隐藏图例? 如何隐藏图例标题? 如何更改图例顺序? 如何更改图例的标签文字? 如何设置图例标题和标签文字的大小.颜色? 如何将图例放到图的上方 ggplot2中图例基础: ggplot2会自动生成图例,我们可以对图例进行删改. 相同名称相同颜色的图例会自动合并.如下图,点图和线图的color.shape产生的图例都是相同名称相同颜色的,所以合并在一次: library(ggplot2) dt = data.frame(A = 1:10, B = c(2,21

ggplot2——玫瑰图

更多内容请见:R.ggplot2.shiny 汇总 初始图样: library(ggplot2) dt = data.frame(A = c(2, 7, 4, 10, 1), B = c('B','A','C','D','E')) windowsFonts(myFont = windowsFont("楷体")) ## 绑定字体 p = ggplot(dt, aes(x = B, y = A, fill = B)) + geom_bar(stat = "identity&quo

R、ggplot2、shiny 汇总

前言: 大家应该都知道,ggplot2 和 shiny 都是R语言七大武器之一,虽然它们的能力很流逼,也出来"行走江湖"多年,但是在国内相关的知识分享还是比较少.很多时候遇到问题不得不翻墙搜索,所以尽管自己资历尚浅,但我还是很希望能够将自己的知识点做个总结分享,希望对后来之人有所帮助! 因为最近工作比较忙,没有集中的时间跟精力,所以改变了一下写博客的方式:减小博客篇幅,然后用索引的方式总结.分享一下关于R.ggplot2.shiny的各种知识点. 1.ggplot2--图例篇:http

诗经 全文

诗经 全文 (带注释和译文) http://www.edu009.com/Article/HTML/Article_60756.html <诗经> 春秋·孔丘 <诗经>是我国第一部诗歌总集,先秦时代称为“诗”或“诗三百”,孔子加以了整理.汉武帝采纳董仲舒“罢黜百家,独尊儒术”的建议,尊“诗”为经典,定名为<诗经>. <诗经>现存诗歌 305 篇,包括西周初年到春秋中叶共 500 余年的民歌和朝庙乐章,分为风.雅.颂三章. “风”包括周南.召南.邶.鄘.卫.王

第三篇:数据可视化 - ggplot2

前言 R语言的强大之处在于统计和作图.其中统计部分的内容很多很强大,因此会在以后的实例中逐步介绍:而作图部分的套路相对来说是比较固定的,现在可以先对它做一个总体的认识. 在上一篇文章中,介绍了使用graphics库进行绘图的方法,而本文将引入一个更为强大的库 --- ggplot2,它能做出各式各样,非常酷炫的统计图(甚至地图,热图等). 本文将结合一个实际项目中的例子讲解如何使用ggplot2绘图. ggplot绘图总体步骤 1. 调用ggplot函数设置图形基本信息 --- 如:使用的数据集

R语言:ggplot2精细化绘图——以实用商业化图表绘图为例

本文旨在介绍R语言中ggplot2包的一些精细化操作,主要适用于对R画图有一定了解,需要更精细化作图的人,尤其是那些刚从excel转ggplot2的各位,有比较频繁的作图需求的人.不讨论那些样式非常酷炫的图表,以实用的商业化图表为主.包括以下结构: 1.画图前的准备:自定义ggplot2格式刷 2.画图前的准备:数据塑形利器dplyr / tidyr介绍 3.常用的商业用图: 1)简单柱形图+文本(单一变量) 2)分面柱形图(facet_wrap/facet_grid) 3)簇型柱形图(posi

R数据分析-------ggplot2工具箱二

本篇主要分为三部分: 揭示不确定性 统计摘要 添加图形注解 1.揭示不确定性 关于不确定的信息,怎么展示很重要,在ggplot2中共有四类几何对象可以用于这项工作,具体使用取决于x的值是离散型还是连续型的.这些几何对象列于下表中: 变量X类型 仅展示区间 同时展示区间和中间值 连续型 geom_ribbon geom_smooth(stat = "identity") 离散型 geom_errorbar geom_linerange geom_crossbar geom_pointra