从使用 ggplot2 创建的多面条形图中删除重复的类别标签

Posted

技术标签:

【中文标题】从使用 ggplot2 创建的多面条形图中删除重复的类别标签【英文标题】:Remove repeated category labels from faceted bar plot created with ggplot2 【发布时间】:2021-09-16 21:08:51 【问题描述】:

我正在尝试使用 ggplot2 在 R 中创建一个多面条形图。我设法创建了情节,但我无法弄清楚如何正确注释它。请考虑以下 R 代码:

library(ggplot2)
library(reshape)
result <- c(0.05, 0.06, 0.08, 0.04, 0.05, 0.09, 1.05, 0.75, 1.4, 1.45)
group <- c("group.1", "group.1", "group.2", "group.1", "group.2", "group.1", "group.1", "group.2", "group.2", "group.2")
char_b <- c("b.1", "b.2", "b.2", "b.2", "b.1", "b.2", "b.2", "b.1", "b.1", "b.1")
char_c <- c("c.1", "c.1", "c.2", "c.2", "c.3", "c.3", "c.4", "c.4", "c.5", "c.5")
char_d <- c("d.1", "d.2", "d.1", "d.1", "d.2", "d.2", "d.1", "d.2", "d.2", "d.2")
approach <- c("method a", "method a", "method a", "method a", "method a", "method b", "method b" , "method b", "method b", "method b")

my_data <- data.frame(result, group, char_b, char_c, char_d, approach, stringsAsFactors=TRUE)
my_data <- melt(my_data, id=c("result","group","approach"))

df_plot <- ggplot(my_data, aes(x=variable, y=result, fill=value)) + 
  geom_bar(stat="identity") + 
  geom_text(aes(label = value), 
            position = position_stack(vjust = 0.5)) +
  facet_wrap(approach ~ group, scales="free_x") +
  theme(
    legend.position="none",
    axis.title.y = element_blank(),
    strip.text.x = element_text(margin = margin(.05, 0, .05, 0, "cm"))
  ) +
  coord_flip()
df_plot

以上代码产生以下结果:

如您所见,此图的问题在于标签重复(例如,d.1、c.1 和 b.2 的标签在方法 a、组的图中出现了两次.1)。我想知道是否可以为每个级别的类别只显示一个标签。我认为出现这个问题是因为我必须重塑数据框来创建构面;然而,我一直没能解决它。

非常感谢您的帮助。

祝你好运,

【问题讨论】:

【参考方案1】:

您可以联系tidyverse。但诀窍是事先汇总数据。

library(tidyverse)
data.frame(result, group, char_b, char_c, char_d, approach, stringsAsFactors=TRUE) %>% 
  pivot_longer(cols = -c("result","group","approach")) %>% 
  group_by(approach, group, name, value) %>% 
  summarise(result = sum(result)) %>% 
  ggplot(aes(name, result, fill = value)) + 
   geom_col(show.legend = F) +
   geom_text(aes(label = value), 
            position = position_stack(vjust = 0.5)) +
   coord_flip() + 
   facet_wrap(approach ~ group, scales="free_x")

在基地R你可以试试

aggregate(result ~ variable + approach + group + value, my_data, sum)

或者干脆

aggregate(result ~ ., my_data, sum)

【讨论】:

非常感谢您的帮助,效果很好!

以上是关于从使用 ggplot2 创建的多面条形图中删除重复的类别标签的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化分面图(faceting)可视化分面条形图(facet_wrap bar plot)使用strip.text函数自定义分面图每个分面标题条带strip的大小(cutomi

ggplot2:从图中删除未使用的因子水平组合的方面(facet_grid)

r 从ggplot2图中删除图例

从图中单独删除负面标签(ggplot + R)

如何从剑道条形图/柱形图中删除水平网格线?

使用ggplot2在叠加密度图中重复图例