学完R语言的基本操作后,我们还可以继续学习R的几大著名而且使用强大的包,今天讲其中的一个,就是ggplot2,至于这个包的评价和地位,我就不多说了,感兴趣可以百度,它绝对是数据可视化的利器,好了,我们先来开始简单介绍一下这个包.
先说说我们人手工作图的方式,1,先画一个坐标轴,2,然后根据数据在图上画图形3,在基础的图形上加一些注释,或加一些对比.基本上这就是我们作图的方式,那么ggplot2就跟这差不多了,1.先设定坐标轴和数据2,选择要画图形的类型3,添加一些图形,4,丰富一下图形的信息.ggplot2根据这个步骤,把每一步当做一个图层,每一个图层我们都可以设定一些参数.,基本上讲这么多就行,其原理虽然可以讲的非常详细,但是听了也就是听了,不明觉厉,不如亲自画几个就明白了.一动手就能体会的.
一.画基本图形.
在画基本图形之前,我先说一下qplot这个函数,这个函数是ggplot2包里面的一个函数,简单作图,他的用法可以看做是基本绘图与ggplot绘图的一个过渡.
首先需要加载ggplot2包
library(ggplot2)
library(gcookbook) #主要用于获取数据集,若你用自己的数据集便可以不加载
1.画点线图.
基础绘图系统:plot(mtcars$wt, mtcars$mpg) #绘制点图
#绘制点线图 在高级绘图函数上添加一个低级绘图函数
plot(pressure$temperature, pressure$pressure, type="l")
points(pressure$temperature, pressure$pressure)
#添加第二条点线图,同样是添加低级绘图函数
lines(pressure$temperature, pressure$pressure/2, col="red")
points(pressure$temperature, pressure$pressure/2, col="red")
qplot:qplot(mtcars$wt, mtcars$mpg) #绘制点图
qplot(pressure$temperature, pressure$pressure, geom="line") #绘制线图 其中geom就控制画什么类型图
qplot(temperature, pressure, data=pressure, geom=c("line", "point")) #绘制点线图
ggplot:ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() #绘制点图
ggplot(pressure, aes(x=temperature, y=pressure)) + geom_line() #绘制线图
ggplot(pressure, aes(x=temperature, y=pressure)) + geom_line() + geom_point() #绘制点线图,相当于图层一个个叠加上去
2.画条形图
基础绘图系统:barplot(BOD$demand, names.arg=BOD$Time) #当变量为数值型,绘制条形图
barplot(table(mtcars$cyl)) #当变量为因子型,绘制频数条形图
qplot: 版本改掉了一些参数,暂时未知
ggplot: ggplot(BOD, aes(x=Time, y=demand)) + geom_bar(stat="identity") #当为数据框时,一个变量表示分类,另一个表示其数 值,我们需要在第二个图层也就是geom_bar内指定统计变换为""identity"即不做变化,若需要绘制计数条形图,则stat="identity"当然这是默认的状态.
ggplot(mtcars, aes(x=factor(cyl))) + geom_bar() #当变量为因子型,绘制频数条形图,而且不用指定y
3.画直方图
基础绘图系统: hist(mtcars$mpg) #绘制直方图
hist(mtcars$mpg, breaks=10) #修改组数
qplot: qplot(mpg, data=mtcars, binwidth=4) #绘制直方图,其中binwidth用于修改竖块的宽度
ggplot: ggplot(mtcars, aes(x=mpg)) + geom_histogram(binwidth=4) #绘制直方图
4:箱线图:
基础绘图系统: plot(ToothGrowth$supp, ToothGrowth$len) #当一个为分类型,一个为连续型自动绘制成箱线图
boxplot(len ~ supp, data = ToothGrowth) #当一个为分类型,一个为连续型绘制成箱线图
boxplot(len ~ supp + dose, data = ToothGrowth) #二个分类型,箱线图,图中有离群点
qplot: qplot(ToothGrowth$supp, ToothGrowth$len, geom="boxplot")
qplot(interaction(ToothGrowth$supp, ToothGrowth$dose), ToothGrowth$len,
geom="boxplot") #二个分类型,箱线图,图中有离群点这里是两个,有木有发现?
这就是基本绘图与ggplot绘图的画箱线图的原理不同
ggplot: ggplot(ToothGrowth, aes(x=supp, y=len)) + geom_boxplot()
ggplot(ToothGrowth, aes(x=interaction(supp, dose), y=len)) + geom_boxplot() #二个分类型,箱线图
5.函数曲线:
基础绘图系统: curve(x^3 – 5*x, from=-4, to=4) # 绘制函数曲线,from,to表示x的定义域
#自定义一个函数
myfun <- function(xvar) {
1/(1 + exp(-xvar + 10))
}
curve(myfun(x), from=0, to=20) #绘制自定义函数
curve(1-myfun(x), add = TRUE, col = "red") #添加一个函数曲线
qplot: 在新版本中stat参数改动,暂未知
ggplot: ggplot(data.frame(x=c(0, 20)), aes(x=x)) + stat_function(fun=myfun, geom="line")
通过以上对比,我们一看就可以知道,ggplot画图的风格,先画出坐标轴框架,再一层一层的往上添加,每一层都可以设定一些参数,以改变图层的样子,至于有哪些参数,以及怎么用,再接下来会慢慢讲到.欢迎继续阅读.
未完待续,
PPV原创文章,严禁转载. (文:@白加黑治感冒)