ggplot2绘图技巧之条形图

今天和大家分享的是关于ggplot2的快速画图入门攻略,会在接下来三章教大家如何绘制工作中最常用的条形图、直方图和折线图,讲解ggplot2的基本语法规则、简单的图形修饰,以及图形进阶功能—分面,不做深入的研究,简单易上手、使用就是王道!

一、ggplot2基本语法规则

ggplot(数据集,aes(x=横坐标,y=纵坐标,fill=填充颜色,color=边框颜色))+geom_bar()/geom_histogram()/geom_line()

+geom_xx代表将要绘制什么样的图形

二、绘制条形图

绘制条形图之前,有几个需要注意的地方:

1.geom_bar默认等于geom_bar(stat="bin"),绘制频数条形图,横坐标表示类别,纵坐标表示对应类别出现的次数;

2.如果要绘制纵坐标代表数值的条形图,应该用geom_bar(stat="identity"),这里很容易被忽视,一定要当心;

3.geom_bar中除了stat参数,还有个参数position,position="dodge"(簇状/水平)、"stack"(堆积/垂直)、"fill"(百分比);

为了让大家更直观的理解如何绘制条形图,我选用ggplot2自带的mtcars数据集进行讲解:

> library(ggplot2)
> str(mtcars)
'data.frame':	32 obs. of  11 variables:
 $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
 $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
 $ disp: num  160 160 108 258 360 ...
 $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
 $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
 $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
 $ qsec: num  16.5 17 18.6 19.4 17 ...
 $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
 $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
 $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
 $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

可以看到,mtcars数据集中的指标均为数值型,为了研究气缸数cyl与汽车马力mpg间的关系,同时是否受指标vs的影响,我们先来画图看看:

扫描二维码关注公众号,回复: 3903391 查看本文章
> ggplot(mtcars,aes(x=cyl,y=mpg,fill=vs))+geom_bar(stat="identity",position="dodge")

从上图可以看到,绘制出来的图形效果并不理想,原因是指标vs只有0/1两个值,不适合直接拿来作为填充依据,因为图例会默认识别为5档数值型,此时如果将其转换成因子型,效果则会好很多:

> ggplot(mtcars,aes(x=cyl,y=mpg,fill=factor(vs)))+geom_bar(stat="identity",position="dodge")

当vs转化为因子型后,绘图变得清楚,同时因为vs=1时,cyl=8的值缺失,因此vs=0,cyl=8的竖条自动填充过来,虽然数据观测值较少,但可以看出,随着气缸数的增加,汽车马力会减小。

接下来讲一下用颜色去代表正负值,在工作中很常见,这里选用《R数据可视化手册》中的一个实例,加深大家的理解,有兴趣可以购买这本书看看,还是很有用的,废话不多说,上代码:

> library(gcookbook)
> str(climate)
'data.frame':	499 obs. of  6 variables:
 $ Source    : chr  "Berkeley" "Berkeley" "Berkeley" "Berkeley" ...
 $ Year      : num  1800 1801 1802 1803 1804 ...
 $ Anomaly1y : num  NA NA NA NA NA NA NA NA NA NA ...
 $ Anomaly5y : num  NA NA NA NA NA NA NA NA NA NA ...
 $ Anomaly10y: num  -0.435 -0.453 -0.46 -0.493 -0.536 -0.541 -0.59 -0.695 -0.763 -0.818 ...
 $ Unc10y    : num  0.505 0.493 0.486 0.489 0.483 0.475 0.468 0.461 0.453 0.451 ...

这里选用的是climate数据集,可以看到climate有6个变量,其中变量Anomaly0y中包含负值,接下来筛选出符合要求的数据

csub<-subset(climate,Source=="Berkeley"&Year>=1900)#提取数据集中source为Berkeley,且年份超过1900年的数据
csub$pos<-csub$Anomaly10y>=0#定义一个变量pos,代表Anomaly10y>0的数据
ggplot(csub,aes(x=Year,y=Anomaly10y,fill=pos))+geom_bar(stat="identity",position="identity")

这里利用fill=正值,来实现用不同颜色代表正负值,如果我们想用红色代表负值,蓝色代表正值,如何操作呢?

ggplot(csub,aes(x=Year,y=Anomaly10y,fill=pos))+geom_bar(stat="identity",position="identity",color="white",size=0.25)+scale_fill_manual(values=c("#FFB6C1","#87CEFA"),guide=FALSE)

这里通过调色盘对填充颜色进行了一个自主编辑,使得绘图结果较为友好,可以直观看到负值年份和正值年份的情况。

由于时间关系,条形图的分享就到这里,后边会和大家分享直方图的绘图方法以及基础的配色设置、图例的设置,敬请期待!有问题欢迎随时沟通。

猜你喜欢

转载自blog.csdn.net/Anna_datahummingbird/article/details/81186727
今日推荐