2015-09-30 15 views
6

Ho un set di dati con valori 2 fattori discreti ordinati, con alcuni valori continui corrispondenti. (Campione casuale viene generato sotto)Coordinata polare/layout circolare per l'intera facet_grid

randomData = expand.grid(1:5, 1:100) # The two discrete variables 
colnames(randomData) = c("index1", "index2") 

randomData$z = runif(nrow(randomData)) # The measured value 

ggplot(randomData, aes(x = 1, y = z)) + 
    geom_bar(stat = "identity") + 
    facet_grid(index1 ~ index2) + 
    theme_minimal() 

enter image description here

Sto cercando di avvolgere l'intera griglia in pianta circolare/polare, come quello mostrato in basso, utilizzando la barra trame generato.

Il primo grafico è l'output desiderato (manipolato da uno strumento di fotoritocco dal primo grafico di sfaccettatura). Il secondo grafico è l'output di questo post del blog: http://chrisladroue.com/2012/02/polar-histogram-pretty-and-useful/). Tuttavia, contiene solo una singola "riga".

enter image description here enter image description here

Non riesco a capire un modo per farlo. quando provo ad aggiungere coord_polar(), i grafici a barre sono influenzati e non il facet.

+0

Hai letto l'intero blogpost? (Dove hai trovato l'immagine). L'autore fornisce il codice su come farlo. http://chrisladroue.com/2012/02/polar-histogram-pretty-and-useful/ – Heroka

+0

Sì Heroka. La principale differenza che ho due (e non una) categorie discrete, ognuna con un istogramma separato. –

+0

Che cosa è esattamente il risultato desiderato. Si desidera avere un grafico per ogni valore di indice2 e in questo si desidera avere 5 barre (una per ciascun valore di indice1) disposte in un cerchio? – konvas

risposta

4

Non penso che sia possibile organizzare le faccette in un cerchio, ma si può imbrogliare cambiando le variabili x e y e quindi utilizzando coord_polar().

library(ggplot2) 
library(dplyr) 
d <- rbind(
    mutate(randomData, col = "dark"), 
    mutate(randomData, col = "blank", z = 1 - z) 
) %>% arrange(d, index2, index1, col) 

ggplot(d, aes(x = factor(index2), y = z)) + 
    geom_bar(aes(fill = col), stat = "identity", position = "stack") + 
    scale_fill_manual(values = c(blank = "white", dark = "black")) + 
    coord_polar() + 
    theme_minimal() + 
    guides(fill = FALSE) 

enter image description here

Si dovrà adattare questo un bel po 'per adattarsi impostare i dati originali, ma si ottiene l'idea - aggiungere righe per i valori (1 - z) e utilizzarli per impilare le barre

+0

Grazie Konvas! Questo è quello che stavo cercando :) –