您现在的位置:主页 > 数据可视化 > R数据可视化之ggplot2 (一)

R数据可视化之ggplot2 (一)

2017-06-19 15:48

 u=2156138114,3697068155&fm=21&gp=0学完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)  #绘制点图1

       #绘制点线图 在高级绘图函数上添加一个低级绘图函数
       plot(pressure$temperature, pressure$pressure, type="l")2
       points(pressure$temperature, pressure$pressure)3
       #添加第二条点线图,同样是添加低级绘图函数
       lines(pressure$temperature, pressure$pressure/2, col="red")
       points(pressure$temperature, pressure$pressure/2, col="red")4

qplot:qplot(mtcars$wt, mtcars$mpg) #绘制点图5

    qplot(pressure$temperature, pressure$pressure, geom="line")  #绘制线图 其中geom就控制画什么类型图7

    qplot(temperature, pressure, data=pressure, geom=c("line", "point")) #绘制点线图9

ggplot:ggplot(mtcars, aes(x=wt, y=mpg)) + geom_point() #绘制点图6

    ggplot(pressure, aes(x=temperature, y=pressure)) + geom_line() #绘制线图8

    ggplot(pressure, aes(x=temperature, y=pressure)) + geom_line() + geom_point() #绘制点线图,相当于图层一个个叠加上去9

2.画条形图

基础绘图系统:barplot(BOD$demand, names.arg=BOD$Time)  #当变量为数值型,绘制条形图11

        barplot(table(mtcars$cyl))           #当变量为因子型,绘制频数条形图12

qplot: 版本改掉了一些参数,暂时未知

ggplot: ggplot(BOD, aes(x=Time, y=demand)) + geom_bar(stat="identity") #当为数据框时,一个变量表示分类,另一个表示其数       值,我们需要在第二个图层也就是geom_bar内指定统计变换为""identity"即不做变化,若需要绘制计数条形图,则stat="identity"当然这是默认的状态.15
      ggplot(mtcars, aes(x=factor(cyl))) + geom_bar() #当变量为因子型,绘制频数条形图,而且不用指定y16

3.画直方图

基础绘图系统: hist(mtcars$mpg)  #绘制直方图21
          hist(mtcars$mpg, breaks=10) #修改组数 22

qplot: qplot(mpg, data=mtcars, binwidth=4) #绘制直方图,其中binwidth用于修改竖块的宽度23

ggplot: ggplot(mtcars, aes(x=mpg)) + geom_histogram(binwidth=4) #绘制直方图24

4:箱线图:

基础绘图系统: plot(ToothGrowth$supp, ToothGrowth$len)  #当一个为分类型,一个为连续型自动绘制成箱线图31
          boxplot(len ~ supp, data = ToothGrowth)   #当一个为分类型,一个为连续型绘制成箱线图32
          boxplot(len ~ supp + dose, data = ToothGrowth) #二个分类型,箱线图,图中有离群点33

qplot: qplot(ToothGrowth$supp, ToothGrowth$len, geom="boxplot") 34

     qplot(interaction(ToothGrowth$supp, ToothGrowth$dose), ToothGrowth$len,
      geom="boxplot")                   #二个分类型,箱线图,图中有离群点这里是两个,有木有发现?

这就是基本绘图与ggplot绘图的画箱线图的原理不同35

ggplot: ggplot(ToothGrowth, aes(x=supp, y=len)) + geom_boxplot()34

     ggplot(ToothGrowth, aes(x=interaction(supp, dose), y=len)) + geom_boxplot() #二个分类型,箱线图36

     

5.函数曲线:

基础绘图系统: curve(x^3 – 5*x, from=-4, to=4) # 绘制函数曲线,from,to表示x的定义域41

         #自定义一个函数
        myfun <- function(xvar) {
        1/(1 + exp(-xvar + 10))
         }
       curve(myfun(x), from=0, to=20) #绘制自定义函数42
       curve(1-myfun(x), add = TRUE, col = "red") #添加一个函数曲线43

qplot: 在新版本中stat参数改动,暂未知

ggplot: ggplot(data.frame(x=c(0, 20)), aes(x=x)) + stat_function(fun=myfun, geom="line")


 

44通过以上对比,我们一看就可以知道,ggplot画图的风格,先画出坐标轴框架,再一层一层的往上添加,每一层都可以设定一些参数,以改变图层的样子,至于有哪些参数,以及怎么用,再接下来会慢慢讲到.欢迎继续阅读.


 

未完待续,

PPV原创文章,严禁转载. (文:@白加黑治感冒)