문제

내 동료는 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))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top