geom_bar()函数不仅可以绘制条形图,还能绘制饼图,跟绘制条形图的区别是坐标系不同,绘制饼图使用的坐标系polar,并且设置theta="y":

coord_polar(theta = "y", start = 0, direction = 1, clip = "on")

条形图的高度通常表示两种情况之一:每组中的数据的个数,或数据框中列的值,高度表示的含义是由geom_bar()函数的参数stat决定的,stat在geom_bar()函数中有两个有效值:count和identity。默认情况下,stat="count",这意味着每个条的高度等于每组中的数据的个数,并且,它与映射到y的图形属性不相容,所以,当设置stat="count"时,不能设置映射函数aes()中的y参数。如果设置stat="identity",这意味着条形的高度表示数据数据的值,而数据的值是由aes()函数的y参数决定的,就是说,把值映射到y,所以,当设置stat="identity"时,必须设置映射函数中的y参数,把它映射到数值变量。

geom_bar()函数的定义是:

geom_bar(mapping = NULL, data = NULL, stat = "count",fill=NULL, position="stack")

参数注释:

  • stat:设置统计方法,有效值是count(默认值) 和 identity,其中,count表示条形的高度是变量的数量,identity表示条形的高度是变量的值;
  • position:位置调整,有效值是stack、dodge和fill,默认值是stack(堆叠),是指两个条形图堆叠摆放,dodge是指两个条形图并行摆放,fill是指按照比例来堆叠条形图,每个条形图的高度都相等,但是高度表示的数量是不尽相同的。
  • fill:条形图的填充色

关于stat参数,有三个有效值,分别是count、identity和bin:

  • count是对离散的数据进行计数,计数的结果用一个特殊的变量..count.. 来表示,
  • bin是对连续变量进行统计转换,转换的结果使用变量..density..来表示
  • 而identity是直接引用数据集中变量的值

position参数也可以由两个函数来控制,参数vjust和widht是相对值:

position_stack(vjust = 1, reverse = FALSE)
position_dodge(width = NULL)
position_fill(vjust = 1, reverse = FALSE)

本文使用vcd包中的Arthritis数据集来演示如何创建条形图。

head(Arthritis)ID Treatment  Sex Age Improved
1 57   Treated Male  27     Some
2 46   Treated Male  29     None
3 77   Treated Male  30     None
4 17   Treated Male  32   Marked
5 36   Treated Male  46   Marked
6 23   Treated Male  58   Marked

其中变量Improved和Sex是因子类型,ID和Age是数值类型。

一,绘制一个条形图

绘制一个饼图之前,需要绘制一个条形图,该条形图有多个分组,这就需要设置映射的x参数映射为一个常量因子,fill映射为分类因子:

ggplot(data=Arthritis, mapping=aes(x="Improved",fill=Improved))+geom_bar(stat="count",width=0.5,position='stack')

在条形图之后,添加一个图层,把条形图转换为饼图:

ggplot(data=Arthritis, mapping=aes(x="Improved",fill=Improved))+geom_bar(stat="count",width=0.5,position='stack')+coord_polar("y", start=0)

二,调整饼图的图形属性

调整饼图的填充色,文本,使饼图看起来更加美观。

1,调整饼图的填充色

使用scale_fill_manual()函数对饼图填充不同的颜色

ggplot(data=Arthritis, mapping=aes(x="Improved",fill=Improved))+geom_bar(stat="count",width=0.5,position='stack')+coord_polar("y", start=0)+scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))

2,调整饼图的标度

blank_theme <- theme_minimal()+theme(axis.title.x = element_blank(),axis.title.y = element_blank(),axis.text.x = element_blank(),axis.text.y = element_blank(),panel.border = element_blank(),panel.grid=element_blank(),axis.ticks = element_blank(),plot.title=element_text(size=14, face="bold"))ggplot(data=Arthritis, mapping=aes(x="Improved",fill=Improved))+geom_bar(stat="count",width=0.5,position='stack',size=5)+coord_polar("y", start=0)+scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))+blank_theme +geom_text(stat="count",aes(label = scales::percent(..count../100)), size=4, position=position_stack(vjust = 0.5))

也可以使用stat="identity" 方式来绘制饼图,绘制的图形是相同的:

mytable <- with(Arthritis,table(Improved))
df <- as.data.frame(mytable)blank_theme <- theme_minimal()+theme(axis.title.x = element_blank(),axis.title.y = element_blank(),axis.text.x = element_blank(),axis.text.y = element_blank(),panel.border = element_blank(),panel.grid=element_blank(),axis.ticks = element_blank(),plot.title=element_text(size=14, face="bold"))ggplot(data=df, mapping=aes(x="Improved",y=Freq,fill=Improved))+geom_bar(stat="identity",width=0.5,position='stack',size=5)+coord_polar("y", start=0)+scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))+blank_theme +geom_text(stat="identity",aes(y=Freq, label = scales::percent(Freq/100)), size=4, position=position_stack(vjust = 0.5))

参考文档:

ggplot2 pie chart : Quick start guide - R software and data visualization

Polar coordinates

ggplot, facet, piechart: placing text in the middle of pie chart slices

转载于:https://www.cnblogs.com/ljhdo/p/4514106.html

R绘图 第八篇:绘制饼图(ggplot2)相关推荐

  1. R绘图 第十篇:绘制散点图(高级)

    散点图用于描述两个连续性变量间的关系,三个变量之间的关系可以通过3D图形或气泡来展示,多个变量之间的两两关系可以通过散点图矩阵来展示. 一,添加了最佳拟合曲线的散点图 使用基础函数plot(x,y)来 ...

  2. R学习 第八篇:日期和时间

    R语言的基础包中提供了三种基本类型用于处理日期和时间,Date用于处理日期,它不包括时间和时区信息:POSIXct/POSIXlt用于处理日期和时间,其中包括了日期.时间和时区信息.R内部在存储日期和 ...

  3. R绘图笔记 | 火山图的绘制

    参考前文:R绘图笔记 | R语言绘图系统与常见绘图函数及参数 关于绘图,前面介绍了一些: R绘图笔记 | 一般的散点图绘制 R绘图笔记 | 柱状图绘制 R绘图笔记 | 直方图和核密度估计图的绘制 R绘 ...

  4. R语言可视化包ggplot2绘制饼图(pie chart)实战

    R语言可视化包ggplot2绘制饼图(pie chart)实战 目录 R语言可视化包ggplot2绘制饼图(pie chart)实战 #ggplot2绘制一个基本饼图

  5. ogre绘制3d图形_R语言统计与绘图:绘制饼图

    饼图也是最常见的图形之一,饼图在商业世界中无所不在,然而多数统计学家,包括相应R文档的编写者却都对它持否定态度. 相对于饼图,更推荐使用条形图或点图,因为相对于面积,人们对长度的判断更精确. 今天来学 ...

  6. python绘制饼图-Python使用Plotly绘图工具,绘制饼图

    今天我们来学习一下如何使用Python的Plotly绘图工具,绘制饼图 使用Plotly绘制饼图的方法,我们需要使用graph_objs中的Pie函数 函数中最常用的两个属性values,用于赋值给需 ...

  7. [Qt教程] 第18篇 2D绘图(八)双缓冲绘图

    [Qt教程] 第18篇 2D绘图(八)双缓冲绘图 楼主  发表于 2013-5-2 22:07:23 | 查看: 789| 回复: 1 双缓冲绘图 版权声明 该文章原创于Qter开源社区(www.qt ...

  8. R绘图 vs Python绘图(散点图、折线图、直方图、条形图、箱线图、饼图、热力图、蜘蛛图)

    写在前面:为啥不用excel绘制这些图,用PoweBI,帆软BI等可视化软件来绘图,不是更方便吗?的确,这些工具都很方便,但同时,它们显得很呆,不够灵活,更为致命的是,它们绘制出的图形,分辨率不够,用 ...

  9. R统计绘图-corrplot热图绘制细节调整2(更改变量可视化顺序、非相关性热图绘制、添加矩形框等)

    上一篇文章推送的是怎样调整corrplot热图的可视化参数,以修改字符和图例位置,数据可视化形式和字符小大和颜色等这篇是一个补充部分,记录怎样修改参数以变量排序方式和突出部分数据.本流程还是使用R统计 ...

最新文章

  1. Spring面试五连问,这怎么顶啊
  2. 新视角来了:《用户体验四维度》
  3. 放置奇兵 算法 月度活动 破碎时空记录 第六关 尸妖+鹿男(奥博隆)
  4. 计算机 java_Java程序到底是如何运行的?
  5. 基于LZ77算法的文件压缩收尾
  6. 软件测试技术lab1 2017.3.13
  7. ios 在UIView上画图,线条
  8. ad敷铜后还有部分飞线_网友自制LPL赛区AD选手排名图!阿水Lwx荣誉值已超越Uzi_电竞...
  9. Linux技术学习要点,您掌握了吗---初学者必看
  10. 线程的创建 锁 Threading模块 事件 条件 定时器 队列 线程池 回调函数
  11. 容易被PHP程序员忽视的几个要点
  12. WSL2:docker中ubuntu18.04编译webRTC
  13. 图灵完备-转自 知乎 陈超 的回答
  14. 每日算法之三十五:Wildcard Matching
  15. 《锁王创造营》 第一关:初出茅庐
  16. 手机进程多了,有的进程就无法联网?
  17. DoIP协议设计思路浅析
  18. 港股美股打新截然不同!教你玩转美股打新
  19. 教程┊解决使用USB键盘进行游戏后按任意键出现蓝屏的错误
  20. 13商软 团队博客 列表

热门文章

  1. Linux内核及主流Linux发行版对应关系汇总
  2. r语言中的多因素方差分析_R中的因素
  3. 杨凌职业技术学院计算机专业宿舍,杨凌职业技术学院宿舍怎么样
  4. android 高仿点餐,android 校园微快递APP仿饿了吗外卖校园点餐食堂点餐-1715-源码+说明资料 - 辅导代做|程序代写毕业设计|代做毕设|定制定做|计算机示例源码...
  5. linux运维每天都要做什么,Linux运维工作清闲吗?每天需要干什么?
  6. 使用EditPlus技巧,提高工作效率(附英文版、自动完成文件、语法文件下载)(转载)...
  7. 【Language model】使用RNN LSTM训练语言模型 写出45°角仰望星空的文章
  8. 基于Citespace软件对WOS文献数据进行可视化的操作
  9. 面向移动设备的html5开发框架
  10. druid 查条数_Druid.io查询分析