博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
R绘图 第八篇:绘制饼图(ggplot2)
阅读量:7216 次
发布时间:2019-06-29

本文共 3526 字,大约阅读时间需要 11 分钟。

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 Improved1 57   Treated Male  27     Some2 46   Treated Male  29     None3 77   Treated Male  30     None4 17   Treated Male  32   Marked5 36   Treated Male  46   Marked6 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))

 

 

 

参考文档:

转载地址:http://nwxym.baihongyu.com/

你可能感兴趣的文章
在windows平台下electron-builder实现前端程序的打包与自动更新
查看>>
DroidPilot V2.1 手写功能特别版
查看>>
COOKIE欺骗
查看>>
js 强转规范解读
查看>>
ACdream - 1735:输油管道
查看>>
golang 获取get参数
查看>>
服务器状态码
查看>>
非小型电子商务系统设计经验分享
查看>>
Video Target Tracking Based on Online Learning—深度学习在目标跟踪中的应用
查看>>
深度学习理论解释基础
查看>>
遗传算法
查看>>
将web网站移动化
查看>>
Application-Session-Cookie
查看>>
Perl的多进程框架(watcher-worker)
查看>>
phpMyAdmin 后台拿webshell
查看>>
Linux 关机 休眠, 关闭移动设备自动挂载 命令
查看>>
Html唤起手机APP,如果有就唤起,如果没有就跳到下载页。
查看>>
Java中File类如何扫描磁盘所有文件包括子目录及子目录文件
查看>>
VC++ 限制窗口的大小范围的方法
查看>>
结对开发-返回一个整数数组中最大子数组的和(首尾相接版)
查看>>