문제
내 동료는 101 Bull's-eye 차트를 플로팅해야합니다. 이것은 그녀의 생각이 아닙니다. 그녀의 노예가 Excel에서 멀어 지거나 하나님이 이런 것들을 만드는 것을 알고있는 대신, 나는 R에서 그들을 할 것을 제안했다. 막대 플롯을 Polar 좌표에 매핑하여 황소의 눈을 만들기 위해 산들 바람입니다. ggplot2
.
그러나 문제가 발생합니다. 데이터는 이미 집계되어 있으므로 Hadley의 예 여기 나를 위해 일하지 않습니다. 카운트를이를 수행하는 요소로 확장 할 수는 있지만 더 나은 방법이 있다고 생각합니다. GEOM_BAR에게 데이터를 읽는 방법을 알려주는 방법이 있습니다.
데이터는 다음과 같습니다.
Zoo Animals Bears Polar Bears
1 Omaha 50 10 3
나는 각 동물원에 대해 줄거리를 만들 것입니다 - 그러나 내가 관리 할 수있는 부분은 그 부분입니다.
그리고 여기에 있습니다 dput
:
structure(list(Zoo = "Omaha", Animals = "50", Bears = "10", `Polar Bears` = "3"), .Names = c("Zoo",
"Animals", "Bears", "Polar Bears"), row.names = c(NA, -1L), class = "data.frame")
참고 : 동물> = 곰> = 북극곰이 중요합니다. 또한, 그녀는 마을을 벗어 났으므로, 그녀에게서 원시 데이터를 얻을 수는 없습니다 (어쨌든 큰 파일이 있다면).
해결책
분리하지 않고이 작업을 수행하는 방법은 사용하는 것입니다. stat="identity"
안에 geom_bar
.
캐릭터 문자열이 아닌 숫자 값이 포함 된 데이터 프레임을 시작하는 데 도움이됩니다.
dat <- data.frame(Zoo = "Omaha",
Animals = 50, Bears = 10, `Polar Bears` = 3)
우리는 필요합니다 reshape2::melt
데이터를 올바르게 구성하려면 :
library(reshape2)
d3 <- melt(dat,id.var=1)
이제 플롯을 만듭니다 (다른 답변과 동일) :
library(ggplot2)
ggplot(d3, aes(x = variable, y = value)) +
geom_bar(width = 1, colour = "black",stat="identity") +
coord_polar()
다른 팁
우리가 더 나은 대답을 기다리고있는 동안, 나는 당신이 언급 한 (차선책) 솔루션을 게시해야한다고 생각했습니다. dat
질문에 포함 된 구조입니다.
d <- data.frame(animal=factor(sapply(list(dat[2:length(dat)]),
function(x) rep(names(x),x))))
cxc <- ggplot(d, aes(x = animal)) + geom_bar(width = 1, colour = "black")
cxc + coord_polar()
당신이 사용할 수있는 inverse.rle
데이터를 재현하려면
dd = list(lengths = unlist(dat[-1]), values = names(dat)[-1])
class(dd) = "rle"
inverse.rle(dd)
여러 동물원 (행)이 있으면 시도해 볼 수 있습니다.
l = plyr::dlply(dat, "Zoo", function(z)
structure(list(lengths = unlist(z[-1]), values = names(z)[-1]), class = "rle"))
reshape2::melt(llply(l, inverse.rle))