将标签添加到ggplot

时间:2019-12-19 20:05:09

标签: r ggplot2

我正在使用ggplot绘制数据图。我想在每个条形图中添加标签,这些标签总共包含一些尺寸类别,然后将其除以该条形的总值,以显示它们所占的百分比。

在没有标签的情况下,图表可以正常工作,但是当我添加标签时,我收到一条有关构成图表的因素之一的错误消息。不过,我不确定该因素与标签之间的关系。

这是我的数据的开头:

head(Russets)
       Variety Rate Hollow Double Knob     AllCWT.AC ValueCWT.AC TuberSize
1  Burbank 2019    1     67     42  351 AVGCWT.AC.0.4    224.9234    0-4 oz
2  Burbank 2019    2     65     43  391 AVGCWT.AC.0.4    226.9199    0-4 oz
3  Burbank 2019    3     64     42  362 AVGCWT.AC.0.4    226.9676    0-4 oz
4  Burbank 2019    4     63     43  348 AVGCWT.AC.0.4    237.4483    0-4 oz
5  Burbank 2019    5     67     48  357 AVGCWT.AC.0.4    227.8079    0-4 oz
6 Norkotah 2019    1     73     56  371 AVGCWT.AC.0.4    168.3245    0-4 oz

这是我用来计算百分比的代码:

everythingRus = Russets %>% 
 filter(!(TuberSize == "Culls")) %>%
 group_by(Variety,Rate) %>%
 summarize(total = sum(ValueCWT.AC))

mrkRus = Russets %>% 
 filter(TuberSize == "6-10 oz" | TuberSize == "10-13 oz" |TuberSize == "13+ oz") %>%
 group_by(Variety,Rate) %>%
 summarize(mrktotal = sum(ValueCWT.AC))

mrk_evyRus = everythingRus %>% left_join(mrkRus) %>%
 mutate(per = paste0((round(mrktotal/total,2))*100,"%"))


perMrkRus <- data.frame(percentRus = mrk_evyRus$per, y = rep(100,times = 15), 
                    trt = rep(c(1,2,3,4, 5),times = 3))

这是基本的ggplot:

RussetPlot <-ggplot(data=Russets,aes(x=Rate,y=ValueCWT.AC,group=interaction(TuberSize,Variety),fill=(TuberSize))) +
  geom_col(position = "stack",inherit.aes = TRUE) +
  facet_wrap(~Variety,nrow=2) +
  geom_label(data = perMrkRus, aes(x= trt,y=y,label = percentRus))

当我在没有最后一行代码的情况下运行它时,它可以正常工作。但是,当我添加该行时,出现以下错误:

  

互动时发生错误(TuberSize,多种):找不到对象'TuberSize'

有人知道这里发生了什么吗?我不确定此错误与添加标签有何关系。如果还有更多信息,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:1)

对于最后一行,请尝试:

geom_label(data = perMrkRus, aes(x= trt,y=y,label = percentRus), inherit.aes=F)

问题在于,当您为情节定义数据和美学时,ggplot假设(通常是正确的)您将使用相同的数据和相同的情节美学(选择x和y数据,分组等)。在您的情况下,ggplot仍在尝试引用分组美学-您尚未重新定义-即使在最后一行给出的数据中不存在TuberSize。通过调用inherit.aes=F,您明确地告诉ggplot忘记在呼叫的早期部分中使用的美学。