查看原文
其他

ggplot2作图初学

2015-12-14 大脸李小圆 微生物生态

最近看到各种paper开始使用ggplot2做图, 感觉特别炫, 以前我都是用最原始的R 里面plot 等画各种图. 最近也来试了一把,算是紧跟潮流吧。

ggplot2是用于绘图的R语言扩展包,其理念根植于《Grammar of Graphics》一书。它将绘图视为一种映射,即从数学空间映射到图形元素空间。例如将不同的数值映射到不同的色彩或透明度。该绘图包的特点在于并不去定义具体的图形(如直方图,散点图),而是定义各种底层组件(如线条、方块)来合成复杂的图形,这使它能以非常简洁的函数构建各类图形,而且默认条件下的绘图品质就能达到出版要求。

在正式开始学习ggplot2命令之前 我们首先讨论qplot。qplot是quick plot的缩写 旨在用最简短的命令画出我们所需的图。


1. 数据

首先在R中安装ggplot2
install.packages("ggplot2")
library(ggplot2)

赋值我们使用的数据为X,方便后面读取

X <- read.delim("http://www.stat.ubc.ca/~rickw/gapminderDataFiveYear.txt")

简单看一下我们数据的前几行

head(X)



2. qplot基本用法


qplot最简单的使用方法和R base中的plot基本一样 可以用来画散点图

qplot(gdpPercap, lifeExp, data=X)

解读:qplot是我们要用的函数,括号里面有三个参数,gdpPercap, lifeExp,是X轴,Y轴参数,data是我们要调用的数据。默认的geom(作图类型)是point散点图,现在我们按enter看一下做出来的图


使用 color = year 可以将该变量用不同颜色标示出来
这里year是个连续的变量 所以颜色以谱的形式标示
用 log = "x" 表示对横轴的变量进行log变换(当然这里也可以直接对x轴进行log,则为log(gdpPercap))
qplot(gdpPercap, lifeExp, data=X, log = "x", color = year)


怎么样,上面的图是不是看起来有序多了

也可以将year变成factor 此时会用离散的颜色标示
qplot(gdpPercap, lifeExp, data=X, log = "x", color = factor(year))


使用 size = pop 用标志的大小显示该变量的大小
qplot(gdpPercap, lifeExp, data=X, log = "x", color = year, size = pop)


还可以使用 shape = continent 用不同的标志来显示该变量
qplot(gdpPercap, lifeExp, data=X, log = "x", color = year, shape = continent)


当我们的数据量大的时候,一些样点 alpha=I(0.25) 指定透明度 0为全透明 1为不透明
当数据重叠严重时比较有用
qplot(gdpPercap, lifeExp, data=X, log = "x", alpha=I(0.25))


3. geom

geom是geometric object的简称 用来生成不同种类的图

=====

3.1 smooth

首先是smooth 用来描述数据的平滑趋势
注意此处 c("point", "smooth") 表示先画point 再画smooth
qplot(gdpPercap, lifeExp, data=X, log = "x", alpha=I(0.5), geom=c("point", "smooth"))


相反的 c("smooth", "point") 就是先画smooth 再画point
qplot(gdpPercap, lifeExp, data=X, log = "x", alpha=I(0.5), geom=c("smooth", "point"))


3.2 line和path

line会将数据沿横轴方向按顺序连接起来 一般用来表示时间序列数据
qplot(pop, lifeExp, data=X, log = "x", alpha=I(0.5), color=year, geom="line")



path会将原始数据中相邻的两个点连接起来 一般用来表示二维数据随时间的变化
qplot(gdpPercap, lifeExp, data=X, log = "x", alpha=I(0.5), color=year, geom=c("point", "path"))


3.3 boxplot和jitter

和R base中的boxplot一样 横轴的数据需要是factor
X$year.fac <- factor(X$year)
注意 color=I("red") 中的I()是必须的 否则"red"会被当做一个新的factor
qplot(year.fac, lifeExp, data=X, color=I("red"), geom="boxplot")


jitter和boxplot类似
qplot(year.fac, lifeExp, data=X, color=I("red"), geom="jitter")

3.4 histogram和density

这里使用 fill=continent 将直方图按不同的continent分割开
qplot(lifeExp,data=X, geom="histogram", fill=continent)

density与histogram类似
qplot(lifeExp,data=X, alpha=I(0.5), geom="density", color=continent)


4. facets

使用facets可以将一个图根据一个或两个变量的值分别显示出来 有利于更直观地进行比较
~左边表示每一行的变量 右边表示每一列的变量
比如 continent~. 根据continent值的不同 将density的图在每一行里显示出来
qplot(lifeExp,data=X, geom="density", facets=continent~.)


类似的 facets=year~continent 根据每一行year和每一列continent值的不同 将histogram的图显示出来
qplot(lifeExp,data=X, geom="histogram", facets=year~continent)



好了,今天的教程就先到这里。其实ggplot2在应用的时候真的很简单,做出来的图也很好看,比R自带包要美观很多。希望大家经过上面的学习可以有个大体了解。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存