zoukankan      html  css  js  c++  java
  • R语言与医学统计图形-【16】ggplot2几何对象之标签与文本

    ggplot2绘图系统——添加标签与文本、数学表达式、条形图文本、注释

    1. 文本与标签添加

    • geom_label的文本将以标签形式出现,即文本会带有一个背景色。

    • geom_text则是纯文本形式展示。

    • annotaete函数则在图上添加一个注释图层。

    文本与标签区别

    p <- ggplot(mtcars,aes(wt,mpg,label=rownames(mtcars)))
    a <- p+geom_text()
    b <- p+geom_label()
    gridExtra::grid.arrange(a,b,ncol=2)
    

    image.png

    将散点与文本组合在一起。

    p+geom_point(color='dodgerblue')+
      geom_text(nudge_x = 0.15, #将文本整体位置平移
                angle=45)  #文本倾斜
    

    image.png
    变量映射。

      scale_color_manual(values=c('black','white','gray'))
    

    image.png
    因为同时映射了填充色和字体颜色,所以图例中出现字母a,目前还不能很好去掉。建议除了label映射外,不要进行多余映射。

    2.数学表达式添加

    数学表达式本质也是一种文本,但需要解析,如parse参数。

    df <- data.frame(x=1:8,y=1.2+x^2)
    ggplot(df,aes(x,y))+geom_point()+
      geom_smooth()+
      geom_text(aes(x=4,y=40),label='y == 1.2 +x^2',
                parse = TRUE, size=7)
    

    image.png

    3. 在条形图上添加文本

    #条形图上添加文本 
    df <- data.frame(x=factor(c(1,1,2,2,2,1)),
                     y=c(18,31,22,14,19,32),
                     grp=c('a','b','a','b','c','c'))
    ggplot(df,aes(x=x,y=y,fill=grp))+
      geom_bar(stat = 'identity',position = 'dodge')+
      geom_text(aes(y=y+1,label=y),position = position_dodge(0.9))
    #在y+1处添加文本,使之在条柱上方,内容为y
    #postion_dodge函数表示标签据条柱中心位置的偏移量
    

    image.png
    堆栈式条图文本

    df <- transform(df,mid_y=ave(df$y,df$x,FUN = function(var)
      cumsum(var)-(0.5*var)))
    #ave分类汇总统计函数,类似tapply。根据x不同水平计算函数y值
    
    ggplot(data=df,aes(x,y,fill=grp,label=y))+
      geom_bar(stat='identity')+
      geom_text(aes(y=mid_y),size=9)
    

    上图堆栈顺序不对,两次翻转调整。

    df <- transform(df,mid_y=ave(ave(df$y,df$x,FUN=rev),
                                 df$x,FUN = function(var)
      cumsum(var)-(0.5*var)))
    #根据x水平对y进行翻转
    ggplot(data=df,aes(x,y,fill=grp,label=y))+
      geom_bar(stat = 'identity')+
      geom_text(aes(y=ave(df$mid_y,df$x,FUN=rev)),size=9)
    #再次翻转
    ggplot(df,aes(x,y,fill=grp,label=y))+
      geom_bar(stat='identity')+
      geom_text(aes(y=mid_y),size=9,
                position = position_stack(vjust=0.5))
    

    结合位置函数简化代码。

    df <- data.frame(x=factor(c(1,1,2,2,2,1)),
                     y=c(18,31,22,14,19,32),
                     grp=c('a','b','a','b','c','c'))
    ggplot(df,aes(x=x,y=y,fill=grp))+
      geom_bar(stat = 'identity',position = 'stack')+
      geom_text(aes(label=y),position = position_stack(vjust = 0.5),size=6)
    

    image.png

    4.注释添加

    annotate函数在图上某个位置或某区域添加注释,无需映射变量,只需指定位置。

    除了添加文本外,还可在任意位置添加散点、矩形、线段等元素。

    a <- p+annotate("text",x=4,y=25,label='I love R',
                    size=5,color='forestgreen')
    #添加矩形
    b <- p+annotate('rect',xmin=3,xmax=4.2,ymin=12,
                    ymax = 21,alpha=.2,fill='forestgreen')
    #线段
    c <- p+annotate('segment',x=2.5,xend=4,y=15,
                    yend=25,color='blue')
    #点线段
    d <- p+annotate('pointrange',x=3.5,y=20,ymin=12,
                    ymax=28,color='red',size=1.5)
    grid.arrange(a,b,c,d,ncol=4)
    

    image.png

  • 相关阅读:
    sdk 今日头条_字节跳动又一Android开源力作!全新视频动画特效SDK
    Android播放透明视频(转载)
    git remote: warning: suboptimal pack
    'gitclone报错fatal:protocolerror:badpackheader'
    解决 Maven 无法下载 fastdfs-client-java 依赖。
    教我兄弟学Android逆向12 编写xposed模块
    教我兄弟学Android逆向11 动态调试init_array
    CommunicationsException
    使用css给table表格表头添加斜线(斜线表格)
    [SAA + SAP] 28. Monitoring
  • 原文地址:https://www.cnblogs.com/jessepeng/p/12307749.html
Copyright © 2011-2022 走看看