R:如何在 ggplot 条形图中的右轴上添加标签?

Posted

技术标签:

【中文标题】R:如何在 ggplot 条形图中的右轴上添加标签?【英文标题】:R: How to add a label on the right axis in a ggplot barchart? 【发布时间】:2021-12-12 01:10:45 【问题描述】:

假设我用这段代码创建了一个 ggplot 条形图:

mtcars$carb<-as.character(mtcars$carb)
mtcars$gear<-as.character(mtcars$gear)
mtcars$carb_labelright<-paste0("label_right",mtcars$carb)

#pelacolset
ggplot(mtcars, 
       #color by which to fill
       aes(fill=gear, 
           #y axis
           y=wt, 
           #x axis
           x=carb)) +
  #title and subtitle
  
  
  #barplot
  geom_bar(position="fill", stat="identity",width=.8)+
  coord_flip()+
  

  #rotate x axis labels 90 degrees
  theme(axis.text.x = element_text(angle=90),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(),
        panel.background = element_blank())

剧情如下:

现在我想使用 carb_labelright 列在条形图的右侧添加数据。它应该是这样的:

如何做到这一点?

【问题讨论】:

【参考方案1】:

我发现使用geom_text(您需要一个数据框)或annotate(geom = "text",...) 最容易进行注释。使用注释通常更安全,因为geom_text 喜欢为每一行创建一个标签(当您使用精心准备的数据框进行注释时,这很好)。

library(tidyverse)
mtcars$carb<-as.character(mtcars$carb)
mtcars$gear<-as.character(mtcars$gear)
mtcars$carb_labelright<-paste0("label_right",mtcars$carb)

ggplot(mtcars) +
  # use geom_col, a convenience wrapper for geom_bar(stat = "identity")
  geom_col(aes(fill=gear, y=wt, x=carb), 
           position="fill", width=.8) +
  # you have to turn clipping off
  coord_flip(clip = "off") +
  annotate(geom = "text", x = unique(mtcars$carb),
           label = unique(mtcars$carb_labelright),
           y = 1, hjust = 0) +
  # you need to increase the legend's margin and make it "transparent"
  # otherwise you will cover some labels. 
  theme(legend.margin = margin(l = 1, unit = "inch"),
        legend.background = element_blank())

由reprex package (v2.0.1) 于 2021 年 10 月 26 日创建

【讨论】:

谢谢,这可行,但有没有不创建新数据框的选项?在我的应用程序中,最好按原样使用该列... @Olympia 更新 完美答案!【参考方案2】:

我还遇到了离散轴不支持二级刻度的问题(请参阅 ggplot2 repo 上的相关issue)。我自己写了a manual guide 解决了这个问题,这确实允许我制作具有离散比例的辅助轴。在下面的代码中,我们使用ggh4x::guide_axis_manual() 结合 rlang/purrr lambda 函数来格式化标签。 (免责声明:我是 ggh4x 的作者)。

library(ggplot2)
#> Warning: package 'ggplot2' was built under R version 4.1.1

mtcars$carb<-as.character(mtcars$carb)
mtcars$gear<-as.character(mtcars$gear)
mtcars$carb_labelright<-paste0("label_right",mtcars$carb)

p <- ggplot(mtcars, 
       aes(fill = gear, y = carb, x = wt)) +
  geom_col(position="fill", width=.8)

p + guides(
  y.sec = ggh4x::guide_axis_manual(
    labels = ~ paste0("label_right_", .x)
  )
)

或者,您也可以直接将标签作为字符向量。

p + guides(
  y.sec = ggh4x::guide_axis_manual(
    labels = sort(unique(mtcars$carb_labelright))
  )
)

由reprex package (v2.0.1) 于 2021 年 10 月 26 日创建

【讨论】:

很好的解决方案!

以上是关于R:如何在 ggplot 条形图中的右轴上添加标签?的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化堆叠的条形图(stacked bar plot)并在每一个条形图的的中间添加对应的数值值标签定位在geom_col堆叠的条形图中的每个条形段的中间

如何修复基本 R 条形图中缺少的标签

如何在 R 中的 ggplot 中为条形图添加误差线

R语言ggplot2可视化:ggplot2可视化水平堆叠条形图并且在每个堆叠条形图的内部居中添加百分比文本标签信息

R语言使用ggplot2可视化:使用ggpattern包在分组条形图中添加自定义条纹图案添加阴影条纹或其他图案或纹理(add hatches, stripes or another pattern

R语言ggplot2可视化绘制分组水平条形图并在条形图的各种位置添加数值标签实战