• 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 简单、益用、图形布局漂亮的特点可谓一览无余。

            

  • 相关阅读:
    virtualBox中有线和无线两种情况下centos虚拟机和本地机互ping的方案
    微信小程序支付Java服务端开发源码,及那些你不知道的坑(一)
    SpringCloud微服务项目实战
    SpringCloud微服务项目实战
    SpringCloud微服务项目实战,服务注册与发现(附面试题)
    Spring Cloud微服务项目实战--Eureka服务搭建
    SpringBoot+SpringCloud面试总结都在这里
    SpringBoot 实现系统控制并发登录人数
    Java中大量if...else语句的消除替代方案
    SpringBoot基于数据库的定时任务实现
  • 原文地址:https://www.cnblogs.com/thinkers-dym/p/4450399.html
Copyright © 2020-2023  润新知