我正在使用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'
有人知道这里发生了什么吗?我不确定此错误与添加标签有何关系。如果还有更多信息,请告诉我。谢谢!
答案 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忘记在呼叫的早期部分中使用的美学。