如果使用融化的 data.table,如何使用 ggplot2 向条形图添加标签?

Posted

技术标签:

【中文标题】如果使用融化的 data.table,如何使用 ggplot2 向条形图添加标签?【英文标题】:How can I add labels to bar chart with ggplot2 if using a melted data.table? 【发布时间】:2021-12-25 06:15:12 【问题描述】:

我正在使用融化的 data.table:

cat <- melt(as.data.table(insti), id.vars=c(1:3,11), measure.vars=4:10)

我用来创建情节的:

  ggplot(cat,
         aes(x=reorder(Llengua, -Publicacions),
             y=Publicacions, fill=Xarxa))+
  geom_bar(stat="identity")+#nº de publicacions
  theme_classic()+
  theme(axis.text.x=element_text(angle=90, hjust=0.8, vjust=0.5), legend.position="top")+
  labs(x="Llengua")+
  ggtitle("Catalunya")+
  geom_text(aes(label =Percentatge), vjust = 0.5)+
  theme(plot.title = element_text(hjust=0.5))+
  scale_fill_manual(values=col.Xarxa)+
  geom_hline(yintercept=0.333*sum(cat$Publicacions),
             linetype="dashed", color = "dark grey")

看起来像这样: enter image description here

我的问题是:如果每一列都来自多行的总和,我如何为每一列添加百分比或绝对值标签(不考虑颜色划分)?

我在 data.table 中添加了一个 Percentatge 列(最初),因此我的 x 值 CatalàEspanyol 具有相同的百分比: enter image description here

但是当我尝试将标签添加到图表时,数字重复出现的次数与对条形图的贡献一样多,因此无法读取任何内容:

 p + geom_text(aes(label =Percentatge), vjust = 0.5)

enter image description here

我可以做些什么来避免重复并在栏上设置它的位置?

【问题讨论】:

使用stat_bin() 参数 【参考方案1】:

使用这两个帖子我可以回答我的问题:

adding overlap data label over bar chart

draw the sum value above the stacked bar

要删除重叠,您可以在 geom_text() 中使用参数 check_overlaps=T 。 但是为了解决我的问题,我必须创建一个新的数据框:

m3 <- aggregate(cat$Publicacions, by=list(Llengua=cat$Llengua), FUN = sum)
m3 <- as.data.frame(m3)

并像这样在geom_text 中使用它:

 + geom_text(aes(x=Llengua, y=x, label=x), data=m3, vjust=-0.2)

【讨论】:

以上是关于如果使用融化的 data.table,如何使用 ggplot2 向条形图添加标签?的主要内容,如果未能解决你的问题,请参考以下文章

如何融化熊猫数据框?

如何使用 data.table 有效地计算坐标对之间的距离:=

如何在不导入所有函数的情况下在包中使用 data.table?

如何融化 Spark DataFrame?

在嵌套字段中应用函数时,data.table表现不佳。

使用带有多个语句的 data.table 进行条件过滤