R-ggplot2

作者: JY_Liu | 来源:发表于2020-02-26 19:39 被阅读0次

    mian function:
    ggplot(): 初始化图形并指定数据来源
    aes() : 指定每个变量的角色
    geom_XXX() : 使用几何函数向图中添加几何对象(视觉输出)
    使用串联符号 (+) 创建函数

    图形保存:

    ggsave(plot=p1, file="mygraph.pdf", width = 3, height = 4)
    

    以pdf格式保存了图片p1,命名为mygraph,3英寸宽4英寸高

    e.g.

    ggplot(data=mtcars, aes(x=hp, y=mpg,color=cyl))+
      geom_point(size=3)+
      facet_grid(am~vs)+
      labs(title='Automobile Data by Engine Type',
           x='Horsepower', y='Miles Per Gallon')
    

    1 几何函数

    函数 图形 参数
    geom_bar() 条形图 color, fill, alpha
    geom_boxplot() 箱线图 color, fill, alpha, notch, width
    geom_density() 密度图 color, fill, alpha, linetype
    geom_histogram() 直方图 color, fill, alpha, linetype, binwidth
    geom_point() 散点图 color, alpha, shape, size
    geom_rug() 地毯图 color, side
    geom_violin() 小提琴图 color, fill, alpha, linetype
    geom_hline() 水平线 color, alpha, linetype, size
    geom_line() 线图 colorvalpha, linetype, size
    geom_smooth() 拟合曲线 method, formula, color, fill, linetype, size

    常用参数

    参数 详述
    color 对点、线和填充区域的边界进行着色
    fill 对填充区域着色,如条形和密度区域
    alpha 颜色的透明度,从0(完全透明)到1(不透明)
    linetype 图案的线条(1=实线,2=虚线,3=点,4=点破折号,5=长破折号,6=双破折号)
    size 点的尺寸和线的宽度
    shape 点的形状(和pch一样,0=开放的方形,1=开放的圆形,2=开放的三角形,16=实心圆点,等等)
    position 绘制诸如条形图和点等对象的位置。对条形图来说,'dodge'将分组条形图并排,'stacked'堆叠分组条形图,'fill'垂直地堆叠分组条形图并规范其高度相等(比例)。对于点来说,'jitter'减少点重叠。
    binwidth 直方图的宽度
    notch 表示方块图是否应为缺口(TRUE/FALSE)
    sides 地毯图的安置("b"=底部, "l"=左部,"t"=顶部,"r"=右部,"bl"=左下部,等等)
    width 箱线图的宽度

    e.g. 以'car'包中的Salaries数据集为例

    # 安装 "car" 包
    install.packages("car")
    library('car')
    Salaries <- carData::Salaries
    > colnames(Salaries)
    [1] "rank"          "discipline"    "yrs.since.phd" "yrs.service"  
    [5] "sex"           "salary"   
    
    
    library(ggplot2)
    ggplot(Salaries, aes(x=rank,y=salary))+
             geom_boxplot(fill="cornflowerblue",color='black',notch = F)+
             geom_point(position = 'jitter',color='blue',alpha=.5)+
             geom_rug(side="1", color= 'black')
    
    几何函数中常用参数设置
    • 可通过 reorder() 函数对x轴变量进行排序
      Default method:
      reorder(x, X, FUN = mean, ..., order = is.ordered(x))
      x: 待排序变量,可为factor
      X: 待排序变量的排序依据,长度与x相同
      FUN: X的排序方式
      order = is.ordered(x): 是否输出 ordered factor

    e.g. 以mpg数据集为例

    rm(list = ls())
    library(tidyverse)
    library(gridExtra)
    
    ggplot2::mpg
    p1 <- ggplot(data = mpg, aes(x = class, y = hwy)) +
      geom_boxplot(fill = 'blue') +
      labs(title = 'p1')
    
    p2 <- ggplot(data = mpg, aes(x = reorder(class, hwy, FUN = median),
                                 y = hwy) 
                 ) +
      geom_boxplot(fill = 'blue') +
      labs(title = 'p2')
    
    grid.arrange(p1,p2, nrow=1)
    
    reorder() 排列变量

    2 分组

    ggplot()中aes()函数负责分配变量,
    直接将aes()中的参数赋值为分组变量。
    可生成 逻辑变量 进行分组
    e.g. 以'car'包中的Salaries数据集为例

    p1 <- ggplot(Salaries, aes(x=rank, y=salary, fill=sex))+
      geom_boxplot()
    p2 <- ggplot(Salaries, aes(x=rank, y=salary, fill= sex=='Male'))+
      geom_boxplot()
    
    # 进行多图展示
    install.packages("gridExtra")
    library(gridExtra)
    grid.arrange(p1,p2, nrow=1)
    
    分组

    比较

    ggplot2::mpg
    
    p1 <- ggplot(data = mpg, aes(x=displ, y=hwy))+
      geom_point()+
      geom_smooth()+
      labs(title = 'p1')
    
    p2 <- ggplot(data = mpg, aes(x=displ, y=hwy))+
      geom_point()+
      geom_smooth(aes(group=drv))+
      labs(title = 'p2')
    
    p3 <- ggplot(data = mpg, aes(x=displ, y=hwy, color=drv))+
      geom_point()+
      geom_smooth(se=FALSE)+
      labs(title = 'p3')
    
    p4 <- ggplot(data = mpg, aes(x=displ, y=hwy))+
      geom_point(aes(color= drv))+
      geom_smooth(se=FALSE)+
      labs(title = 'p4')
    
    
    p5 <- ggplot(data = mpg, aes(x=displ, y=hwy))+
      geom_point(aes(color=drv))+
      geom_smooth(aes(linetype=drv))+
      labs(title = 'p5')
    
    p6 <- ggplot(data = mpg, aes(x=displ, y=hwy, color=drv))+
      geom_point()+
      labs(title = 'p6')
    
    library(gridExtra)
    grid.arrange(p1,p2,p3,p4,p5,p6, nrow=2)
    
    分组-比较

    3 刻面

    使得不同组在一幅图中并排出现
    facet_wrap()facet_grid() 函数

    语法 结果
    facet_wrap(~var, ncol=n) 按var分组后水平排为n列
    facet_wrap(~var, nrow=n) 按var分组后水平排为n行
    facet_grid(rowvar~colvar) rowvar行,colvar列 (可设定两个分组变量)
    facet_grid(rowvar~. ) 按 rowvar 分组,排成一列
    facet_grid( .~colvar) 按 colvar 分组,排成一行

    e.g. 以'car'包中的Salaries数据集为例

    ggplot(Salaries, aes(x=yrs.since.phd, y=salary, color=rank, shape=rank))+
      geom_point()+
      facet_grid(.~sex)
    
    # facet_grid(.~sex) == facet_wrap(~sex, nrow=1)
    
    刻面展示

    4 添加平滑曲线

    geom_smooth() 函数添加拟合曲线

    参数 描述
    method 使用的拟合函数模型(lm:线性, glm:广义线性, smooth:非参数光滑曲线, rlm:稳健线性, gam:广义相加模型)
    formula 拟合函数使用的公式(y~x (默认), y~log(x), y~poly(x,n) (n次多项式拟合), y~ns(x,n)(n个自由度的样条拟合))
    se 置信区间(默认TRUE)
    level 置信区间水平(默认95%)
    fullfigure 拟合曲线覆盖全图(TRUE), 仅覆盖数据(FALSE), 默认FALSE

    e.g. 以'car'包中的Salaries数据集为例

    ggplot(Salaries, aes(x=yrs.since.phd, y=salary, linetype=sex, shape=sex, color=sex))+
      geom_smooth(method=lm, formula=y~poly(x,2), se=F, size=1)+
      geom_point(size=2)
    
    平滑曲线

    5 更改图形外观

    5.1 坐标轴

    连续型(数值):scale_x_continuous(breaks=, labels=, limits=)
    不连续型(字符):scale_x_discrete(breaks=, labels=, limits=)
    breaks: 指定刻度标记
    labels: 指定标签
    limits: 显示范围
    coord_flip(): 颠倒坐标轴
    coord_polar(): 使用极坐标系(鸡冠花图)
    coord_fixed(): 固定横纵轴的增长比例 ,默认1:1
    e.g. 以'car'包中的Salaries数据集为例

    ggplot(Salaries, aes(x=rank, y=salary, fill=sex))+
      geom_boxplot() +
      scale_x_discrete(breaks=c("AsstProf", "AssocProf", "Prof"),
                       labels=c("assistant\nprofessor",
                                "associate\nprofessor",
                                "professor")) +
      scale_y_continuous(breaks = c(50000, 100000, 150000, 200000),
                         labels = c("50K", "100K", "150K", "200K")) +
      labs(tittle= "Faculty salary by rank and sex", x="", y="")
    
    更改坐标轴

    5.2 调整分组显示(标尺)

    通过调整颜色从而进行可视化,可应用到离散和连续型变量
    scale_color_manual(values=c("colr1","colr2")) 或
    scale_color_brewer(palette="SetX") 函数指定颜色 (color或fill)
    e.g. 以'car'包中的Salaries数据集为例

    ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary, color=rank)) +
    scale_color_manual(values = c("orange", "olivedrab", "navy")) +
    geom_point(size=2)
    
    标尺
    # 查看所有颜色集
    library(RColorBrewer)
    display.brewer.all()
    
    # 或通过如下指令更改填充颜色
    scale_fill_manual(values = "colr1", "colr2")
    scale_fill_brewer(palette = "SetX")
    

    5.3 主题

    通过 theme() 函数设置图形的整体外观
    e.g. 以'car'包中的Salaries数据集为例

    # 使用theme()函数设置主题
    mytheme <- theme(plot.title = element_text(face = "bold.italic",
                                               size = "14", color = "black"),
                     axis.title = element_text(face = "bold.italic",
                                               size = 10, color = "brown"),
                     axis.text = element_text(face = "bold",size = 9,
                                              color = "darkblue"),
                     panel.background = element_rect(fill = "white",
                                                     color = "darkblue"),
                     panel.grid.major.y = element_line(color = "grey", linetype = 1),
                     panel.grid.minor.y = element_line(color = "grey", linetype = 2),
                     panel.grid.minor.x = element_blank(),
                     legend.position = "top"
                     
                     )
    
    # 在函数中声明 +mytheme
    ggplot(Salaries, aes(x=rank, y=salary, fill=sex))+
      geom_boxplot() +
      labs(title = "Salary by rank and sex", x="Rank", y="Salary") +
      mytheme
    
    主题

    5.4 多图

    使用 "gridExtra" 包进行多个图形的合并
    e.g. 以'car'包中的Salaries数据集为例

    install.packages("gridExtra")
    library(gridExtra)
    
    p1 <- ggplot(Salaries, aes(x=rank)) + geom_bar()
    p2 <- ggplot(Salaries, aes(x=sex)) + geom_bar()
    p3 <- ggplot(Salaries, aes(x=yrs.since.phd, y=salary)) + geom_point()
    
    grid.arrange(p1,p2,p3, ncol=3)
    
    多重图

    相关文章

      网友评论

          本文标题:R-ggplot2

          本文链接:https://www.haomeiwen.com/subject/jjimqhtx.html