나는 이것을 달성하는 가장 쉬운 방법은 플롯을 작성하기 전에 데이터를 준비하는 것이라고 생각합니다.
abi <- function(cont) {
with(stuff.dat,
num[continent == cont & stuff == "apples"]/num[continent == cont & stuff == "bananas"]
)
}
그리고 내가 필요한 모든 데이터와 데이터 프레임 생성 : 이제
conts <- levels(stuff.dat$continent)
abi_df <- data.frame(continent = conts,
yf = aggregate(num ~ continent, sum, data = stuff.dat)$num + 5,
abi = round(sapply(conts, abi), 1))
을, 내가 할 수있는 나는 대륙 주어진 stuff.dat
에서 사과 바나나 인덱스를 계산하는 기능 abi()
를 정의 플롯에 해당 정보를 추가
library(ggplot2)
ggplot(stuff.dat, aes(x = continent, y = num, fill = stuff)) +
geom_col() +
geom_text(position = position_stack(vjust = 0.5), aes(label = num)) +
geom_text(data = abi_df, aes(y = yf, label = paste0("f = ", abi), fill = NA))

에 fill = NA
을 추가하면 약간의 해킹이 발생하며 경고 메시지가 표시됩니다. 그러나 fill
을 설정하지 않으면 플로팅이 실패하고 stuff
이라는 메시지가 표시됩니다. 또한 geom_col()
에 ggplot()
에서 fill = stuff
를 이동하려고하지만이 막대 내부의 텍스트 레이블의 y⁻coordinate 나누기. 이 문제에 대한 더 깔끔한 해결책이있을 수 있지만 아직 찾지 못했습니다. 하나는 쉽게 그림 영역 외부에 텍스트를 추가 할 수 없기 때문에 추가 범례를 추가
은, 불행하게도, 사소한하지 않습니다. 실제로는 두 단계가 필요합니다. 첫 번째 단계는
annotation_custom()
을 사용하여 텍스트를 추가합니다. 그렇다면, 당신은 (예를 들어, 참조
here를) 텍스트를 볼 수 있도록 클리핑을 해제해야합니다. 당신은 정상 바 음모 텍스트를 필요로하지 않을 것을 알고
p <- ggplot(stuff.dat, aes(x = continent, y = num, fill = stuff)) +
geom_col() +
geom_text(position = position_stack(vjust = 0.5), aes(label = num)) +
geom_text(data = abi_df, aes(y = yf, label = paste0("f = ", abi), fill = NA)) +
guides(size = guide_legend(title = "f: ABI", override.aes = list(fill = 1))) +
annotation_custom(grob = textGrob("f: ABI\n(Apple-\nBanana-\nIndex",
gp = gpar(cex = .8), just = "left"),
xmin = 3.8, xmax = 3.8, ymin = 17, ymax = 17)
# turn off clipping
library(grid)
gt <- ggplot_gtable(ggplot_build(p))
gt$layout$clip[gt$layout$name == "panel"] <- "off"
grid.draw(gt)

:이 가능한 솔루션입니다? 이 수치는 파악하기가 너무 어렵고 지금이 추가 정보가 필요합니다. – PoGibas