R画图包ggplot2简介

一、简介:

      ggplot2是R语言中很受欢迎的一个画图package,使用起来非常友好。ggplot2的实现得益于Leland Wilkinson在他的著作《The Grammar of Graphics》中提出了一套图形语法,把图形元素抽象成可以自由组合的成分,Hadley Wickham把这套想法在R中实现。Hadley Wickham有本专门讲ggplot2的书------ggplot2: 数据分析与图形艺术,感兴趣可以阅读。

      这里有一个入门PPT------30分钟学会ggplot2.pdf,大家可以查看;

二、准备工作:

     1)安装R软件(必选):http://www.r-project.org,先选择镜像,再下载;

     2)安装RStudio(可选):http://www.rstudio.com/products/rstudio/,RStudio是一个应用广泛的IDE,功能强大友好,建议安装;

     3)加载ggplot2(必选):打开R,在命令行中输入:install.packages("ggplot2"),会让你选择镜像后自动安装;在脚本中调用该包的时候,需要先加载该包,输入library(ggplot2) 即可;

三、ggplot2基本概念:

     1)映射:

          将数据中的变量映射到图形属性,如以下数据(表一),将trt这列映射为颜色(表二),显示效果如图一所示;

          命令为: 

data = data.frame(length=c(2,1,4,5), width=c(3,2,5,6), trt=c('a','a','b','b'))
p = ggplot(data, aes(length, width, col=trt))
p + geom_point()

    表一:

length width trt
2 3 a
1 2 a
4 5 b
5 6 b

    表二:

lengthwidthcolour
2 3 a
1 2 a
4 5 b
5 6 b

 

      图一:

     2)标度(scale):

          标度负责映射后图形显示的方式,具体来说就是图例和坐标刻度,即映射后对应的具体的值,如表二中的数据,实际对应的标度如:

lengthwidthcolour
25 20 red
0 0 red
75 60 blue
100 80 blue

     

      3)几何对象:

        所对应的函数均以“geom_”开头,表示在图形中看到的点、线等形状;

        散点图命令如“1) 映射”中所示,折线图命令如下:

data = data.frame(length=c(2,1,4,5), width=c(3,2,5,6), trt=c('a','a','b','b'))
p = ggplot(data, aes(length, width, col=as.factor(1)));
p + geom_line()

        图二:

     

      4)统计变换:

         函数以“stat_”开头,指对原始数据进行某些计算,比如在散点图中加入回归线,只需用p + stat_smooth()即可加入回归线:

         命令为:         

num = 50
x = rnorm(num, 3, 3)
y = 2*x + 1 + rnorm(num, sd=2)
data = data.frame(x, y)
p = ggplot(data, aes(x, y))
p + geom_point() + stat_smooth(method = 'lm')

         效果如下,图中阴影为置信度为0.95的区间范围:

         图三:

               

     

       5)图层:

           如图一、图二所示的散点图、折线图都是一个图层,在ggplot中图层可以叠加在一起显示:

           命令:

data = data.frame(length=c(2,1,4,5), width=c(3,2,5,6), trt=c('a','a','b','b'))
p = ggplot(data, aes(length, width));
p + geom_line() + geom_point(aes(col=trt, size=3))

           图四:

 

       

四、案例:

      按照如下程序,产生随机数据:

#该数据的含义是从7月1日至7月7日,每天有若干队提交成绩,这些队分属于A组或B组,
#最终看每天A组、B组的成绩箱线图,比较到底哪组成绩更好
num = 6 #表示共统计6天的成绩 set.seed(0) days = sample(20, num) #每天有若干队提交成绩,取值1至20的随机数 dates = paste('0', 701:(701 + num), sep='') dates2 = NULL for(i in 1:num) { dates2 = c(dates2, rep(dates[i], days[i])) #生成每个队提交成绩的日期 } num2 = sum(days) score = runif(num2, 0, 1) #生成每天每个队的成绩 flag = sample(c('A','B'), num2, replace=T) #生成每个队属于A组或B组 test_data = data.frame(date = dates2, score = score, flag = flag)

     数据格式为:

> head(test_data)
  date      score flag
1 0701 0.89838968    A
2 0701 0.94467527    A
3 0701 0.66079779    B
4 0701 0.62911404    A
5 0701 0.06178627    B
6 0701 0.20597457    A

    如何用ggplot2画出 A、B两组成绩在日期0701—0706这六天的对比情况呢?

    试试下面的命令:    

p = ggplot(test_data, aes(date, score))
p2 = p + geom_boxplot(aes(fill = factor(flag)))
p2

     可以得到很靓丽的结果(如下图),在这个例子中 ggplot2 简单、益用、图形布局漂亮的特点可谓一览无余。

        

原文地址:https://www.cnblogs.com/thinkers-dym/p/4450399.html