R语言ggplot2包之画直方图

原创 2015年07月09日 20:28:08

引言

ggplot2包的作图质量毋庸置疑,但是其作图语法对新手来说还是有点难度,ggplot2:数据分析与图形艺术这本书也介绍了ggplot2包的基本哲学思想和操作,个人感觉例子还不够丰富,所以对该包的用法还是停留在半瓶醋的水平。某天,突然发现一本ggplot2包的例子书,大喜,英文版名字为 R Graphics Cookbook,中文版叫做 R数据可视化手册,鉴于高昂的价格,我决定硬着头皮翻下英文版,顺便做点笔记,供自己或者各位朋友参考,英文水平不高,如有错误,莫怪。

基本操作

首先,我想介绍的是用ggplot2画直方图,基本用法如下:

install.packages('gcookbook')#R数据可视化手册书中的数据集
library(ggplot2)
library(gcookbook) 
ggplot(pg_mean, aes(x=group, y=weight)) + geom_bar(stat="identity")

直方图
ggplot()函数生成图层,aes()指定x和y轴变量,x一般为名义变量;geom_bar生成直方图图层。

如果x为连续变量或者数值变量,直方图会有点不同。如果是连续变量,直方图的横坐标会取连续变量最大值与最小值之间每一个数值;如果是数值变量,你得把数值变量转化成因子,例子见代码。

BOD#BBD数据集 Time变量不包含6这个数值
Time demand
1 8.3
2 10.3
3 19.0
4 16.0
5 15.6
7 19.8
ggplot(BOD, aes(x=Time, y=demand)) + geom_bar(stat="identity")#直接赋值,不做因子转化
ggplot(BOD, aes(x=factor(Time), y=demand)) + geom_bar(stat="identity")#变量进行因子转化

图2
图3
直接把连续变量赋值给x和数值转为因子后给x的差异从图中就能很清楚的看出来。

调整颜色

直方图默认为黑灰色填充,我们可以对填充颜色和直方图边框颜色进行修改。

ggplot(pg_mean, aes(x=group, y=weight)) +
geom_bar(stat="identity", fill="lightblue", colour="black")

图4

分组直方图

有时候我们想对同一数据中的两类不同对象进行比较,我们可以使用分组直方图。我们使用cabbage_exp数据集,该数据集包含两类不同数据

cabbage_exp#数据集
Cultivar Date Weight
c39 d16 3.18
c39 d20 2.80
c39 d21 2.74
c52 d16 2.26
c52 d20 3.11
c52 d21 1.47
ggplot(cabbage_exp,aes(x=Date, y=Weight, fill=Cultivar))+geom_bar(stat='identity',position="dodge")#identity意味着把y当做值去输入,如果改成bin,就会计算y出现的频数。dodge意味是各组是左右分布而不是上下重叠
ggplot(cabbage_exp,aes(x=Date, y=Weight, fill=Cultivar))+geom_bar(stat='identity')

图5
图12上下重叠分组

制作频数直方图

频数直方图不需要指定变量y,而是根据变量x出现的频数自动生成。

ggplot(diamonds, aes(x=cut)) + geom_bar(stat="bin")#stat="bin"可有可无,该参数是默认的

图6

给正值和负值直方图赋予不同颜色

csub <- subset(climate, Source=="Berkeley" & Year >= 1900)
csub$pos <- csub$Anomaly10y >= 0 #pos变量是个布尔变量,值为T or F
ggplot(csub, aes(x=Year, y=Anomaly10y, fill=pos)) +geom_bar(stat="identity", position="identity")#position="identity"是为了关闭负值直方图没有定义的警告

图7

调整直方图柱子大小及宽度

直方图宽度调整用width函数,默认值为0.9。我们可以通过修改该值,使柱子变得更宽or更窄。

ggplot(pg_mean, aes(x=group, y=weight)) + geom_bar(stat="identity", width=0.5)#窄柱子
ggplot(pg_mean, aes(x=group, y=weight)) + geom_bar(stat="identity", width=0.5)#宽柱子

图8窄柱子
图9宽柱子
还有在分组直方图中,各组柱子之间是没有空隙的,如果要改变柱子之间距离,我们需要设置position=po
sition_dodge()。

ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) +geom_bar(stat="identity", width=0.5, position=position_dodge(0.6))#值越大越离得远

图10

图中增加数据

可以用geom_text()给直方图中增加图注或数据,通过设定vjust可以使数据显示在柱子上或立面。

ggplot(cabbage_exp,aes(x=interaction(Date, Cultivar),y=Weight))+geom_bar(stat="identity")+geom_text(aes(label=Weight), vjust=-0.2)#显示在上面
ggplot(cabbage_exp,aes(x=interaction(Date,Cultivar),y=Weight))+geom_bar(stat="identity") +geom_text(aes(label=Weight),vjust=1.5,colour="white")#显示在里面

图13显示在上面
显示在里面
暂时先介绍些基础,需要更多高级主题或例子,可以参考R数据可视化手册,或者多用help().

版权声明:本文为博主原创文章,未经博主允许不得转载。

ggplot2–绘制分布图

ggplot2–绘制分布图本文更新地址:本文在 http://www.cookbook-r.com/Graphs/Plotting_distributions_(ggplot2)/ 的基础上加入了自己...

R语言ggplot包之数据分布汇总

引言我们经常想观察一批数据的分布形态,直方图、密度图、箱线图、小提琴图和点图等都是很好的实现形式。在此,我们简略介绍直方图、密度图和箱线图,这种三种图形对我们来说更为常用。直方图很多人没搞清楚条形图和...

利用ggplot画分组柱状图的方法

首先构造出数据:> year size supp

【ggplot】复杂柱状图:自定义颜色、标签、位置、坐标轴和主题

一直想有机会好好梳理下ggplot的图形,但是一般情况下ggplot常用的图形还是一些线图和柱状图,但是使用ggplot的好处(对比excel)就是R在处理大数据可以不用切换软件直接截取,但是坏处就是...

用R画直方图

用R画直方图和核密度图条形图、饼图:分类型名义型数据展示 直方图:描述连续型数据 一.首先展示一下直方图: 接下来将展现如何画直方图的代码:>par(mfrow=c(2,2)) >hist(m...

R 语言 绘制横向的直方图(条状图)

barplot(rev(qs$ppp),horiz=T,xlim=c(-4,1),axes=F,col=rep(brewer.pal(9,'YlOrRd'),each=15)) text(seq(fr...
  • rav009
  • rav009
  • 2014年10月16日 15:47
  • 8022

r语言画频数分布直方图和频率分布直方图

#画频率分布直方图 #纵坐标名字为frequency,频数直方图。则使用:hist(x,freq=T) #纵坐标名字为density,频率直方图。则使用:hist(x,freq=F) hist(...

[R语言绘图]直方图hist

R语言中直方图hist函数的用法

R语言之ggplot2画图篇

1. qplot

ggplot2——柱状图

目录: 初始图样 如何修改柱条的宽度 如何修改柱条的顺序 如何在柱条上添加文字 (更多关于图例、坐标系等内容请见:R、ggplot2、shiny 汇总) 初始图样:library(ggp...
  • Bone_ACE
  • Bone_ACE
  • 2015年08月20日 00:47
  • 12235
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:R语言ggplot2包之画直方图
举报原因:
原因补充:

(最多只允许输入30个字)