代码之家  ›  专栏  ›  技术社区  ›  aL3xa

在ggplot2中显示频率和条形图

  •  14
  • aL3xa  · 技术社区  · 16 年前

    我试图在条形图中显示频率…好吧,我要他们 在某处 在图形中:在条下、条内、条上或在图例区域中。我记得(我可能错了)它可以在 ggplot2 . 这可能很简单…至少看起来很容易。代码如下:

    p <- ggplot(mtcars)
    p + aes(factor(cyl)) + geom_bar()
    

    有没有可能把频率嵌入到图中?

    5 回复  |  直到 7 年前
        1
  •  18
  •   Aniko    16 年前

    geom_text 是模拟的吗 text 从基础图形:

    p + geom_bar() + stat_bin(aes(label=..count..), vjust=0, 
                              geom="text", position="identity")
    

    如果要调整标签的Y位置,可以使用 y= 内在美 stat_bin :例如, y=..count..+1 将标签放在吧台上方一个单位。

    如果您使用 地理文本 stat="bin" 里面。

        2
  •  4
  •   Yorgos    16 年前

    很难做到。我相信有更好的方法。

    ggplot(mtcars,aes(factor(cyl))) + 
    geom_bar() + 
    geom_text(aes(y=sapply(cyl,function(x) 1+table(cyl)[names(table(cyl))==x]),
    label=sapply(cyl,function(x) table(cyl)[names(table(cyl))==x])))
    
        3
  •  1
  •   Yannick Wurm    16 年前

    当需要添加不同的信息时,可以执行以下操作:

    ggplot(mydata, aes(x=clusterSize, y=occurence)) +
    geom_bar() + geom_text(aes(x=clusterSize, y=occurence, label = mydata$otherinfo))
    
        4
  •  0
  •   Valentin_Ștefan    7 年前

    或者,我发现使用一些可用的注释函数很有用: ggplot2::annotate , ggplot2::annotation_custom cowplot::draw_label (它是 annotation_custom )

    ggplot2::注释 只是回收geom文本选项。对于在画布上的任何地方绘制,更有利的是 ggplot2::注释_自定义 CowPlot::绘制标签 .

    示例 ggplot2::注释

    library(ggplot2)
    
    p <- ggplot(mtcars) + aes(factor(cyl)) + geom_bar()
    
    # Get data from the graph
    p_dt <- layer_data(p) # or ggplot_build(p)$data
    
    p + annotate(geom = "text", label = p_dt$count, x = p_dt$x, y = 15)
    

    或允许 y 变化:

    p + annotate(geom = "text", label = p_dt$count, x = p_dt$x, y = p_dt$y + 1)
    

    实例与 ggplot2::注释_自定义

    这个 ggplot2::注释 当试图在更“非常规”的地方进行策划时有局限性,正如最初所问的那样。 在某处 在图表中)。然而, ggplot2::注释_自定义 结合 setting clipping off ,允许批注 在任何地方 在画布/工作表上,如下例所示:

    p2 <- p + coord_cartesian(clip = "off")
    for (i in 1:nrow(p_dt)){
      p2 <- p2 + annotation_custom(grid::textGrob(p_dt$count[i]), 
                                   xmin = p_dt$x[i], xmax = p_dt$x[i], ymin = -1, ymax = -1)
    }
    p2
    

    实例与 CowPlot::绘制标签

    CowPlot::绘制标签 ggplot2::注释_自定义 ,因此稍微不那么冗长。它还需要剪掉绘图画布上的任何地方。

    library(cowplot)
    #> Warning: package 'cowplot' was built under R version 3.5.2
    #> 
    #> Attaching package: 'cowplot'
    #> The following object is masked from 'package:ggplot2':
    #> 
    #>     ggsave
    # Revert to default theme; see https://stackoverflow.com/a/41096936/5193830
    theme_set(theme_grey())
    
    p3 <- p + coord_cartesian(clip = "off")
    for (i in 1:nrow(p_dt)){
      p3 <- p3 + draw_label(label = p_dt$count[i], x = p_dt$x[i], y = -1.8)
    }
    p3
    

    请注意, draw_label 也可与 cowplot::ggdraw ,切换到相对坐标,范围从0到1(相对于整个画布,请参见 help(draw_label) )在这种情况下设置 coord_cartesian(clip = "off") 不再需要了 ggdraw .

    reprex package (v0.2.1)

        5
  •  -1
  •   Karsten W.    16 年前

    如果您不受ggplot2限制,可以使用吗?基本图形文本还是?plotrix包中的boxed.labels。

    推荐文章