Pergunta

Um colega meu precisa traçar 101 gráficos olho de boi. Esta não é a sua idéia. Ao invés de ter seu escravo longe no Excel ou Deus sabe o que fazer essas coisas, eu me ofereci para fazê-los em R; mapeamento de uma trama bar para coordenadas polares para fazer um olho de boi é uma brisa em ggplot2.

Eu estou correndo em um problema, porém: os dados já estão agregados, por isso o exemplo de Hadley aqui não está funcionando para mim. Eu poderia expandir as contagens fora em um fator de fazer isso, mas eu sinto que há uma maneira melhor -. Alguma maneira de dizer ao geom_bar como ler os dados

Os olhares de dados como este:

    Zoo Animals Bears Polar Bears
1 Omaha      50    10           3

Eu vou estar fazendo um complô para cada jardim zoológico -. Mas essa parte eu possa gerenciar

e aqui está sua 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")

Nota: é significativo que Animais> = Bears> = ursos polares. Além disso, ela está fora da cidade, por isso não posso só pegar os dados brutos dela (se alguma vez houve um grande arquivo, de qualquer maneira).

Foi útil?

Solução

A maneira de fazer isso sem desagregar é usar stat="identity" em geom_bar.

Ela ajuda a ter a estrutura de dados contendo valores numéricos, em vez de cadeias de caracteres para começar:

dat <- data.frame(Zoo = "Omaha",
               Animals = 50, Bears = 10, `Polar Bears` = 3)

Nós fazemos necessidade reshape2::melt de se organizar os dados corretamente:

library(reshape2)
d3 <- melt(dat,id.var=1)

Agora crie o enredo (idêntica à outra resposta):

library(ggplot2)
ggplot(d3, aes(x = variable, y = value)) +
    geom_bar(width = 1, colour = "black",stat="identity") +
    coord_polar()

Outras dicas

Enquanto estamos à espera de uma resposta melhor, eu percebi que eu deveria postar a solução (suboptimal) que você mencionou. dat é a estrutura incluída na sua pergunta.

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() 

Você pode usar inverse.rle para recriar os dados,

dd = list(lengths = unlist(dat[-1]), values = names(dat)[-1])
class(dd) = "rle"
inverse.rle(dd)

Se você tem vários jardins zoológicos (linhas), você pode tentar

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))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top