2014-07-17 30 views
20

Desidero aggiungere etichette di dati sul carattere a torta sfaccettato.
Forse qualcuno può aiutarmi.R + ggplot2 => aggiungi etichette sul grafico a torta delle faccette

I miei dati:

year <- c(1,2,1,2,1,2) 
prod <- c(1,1,2,2,3,3) 
quantity <- c(33,50,33,25,34,25) 

df <- data.frame(year, prod, quantity) 
rm(year, prod, quantity) 

Codice:

library(ggplot2) 

# center's calculated by hand 
centr2 <- c(16, 25, 49, 62.5, 81, 87.5) 

ggplot(data=df, aes(x=factor(1), y=quantity, fill=factor(prod))) + 
    geom_bar(stat="identity") + 
    geom_text(aes(x= factor(1), y=centr2, label = df$quantity), size=10) + 
    facet_grid(facets = .~year, labeller = label_value) + 
    coord_polar(theta = "y") 

E il mio risultato è:

pie char

Se rimuovo coord_polar (theta = "y"), I avrà il seguente grafico:

bar plot

E ora è chiaro per me, perché le mie etichette dei dati non corrispondevano.
Ma non so come risolverlo.

ho letto:
1. Place labels on Pie Chart
2. Add text to ggplot with facetted densities
3. Pie plot getting its text on top of each other

ma non ha trovato la risposta.

risposta

20

Mi avvicinerei a questo definendo un'altra variabile (che io chiamo pos) in df che calcola la posizione delle etichette di testo. Lo faccio con dplyr ma potresti anche usare altri metodi, ovviamente.

library(dplyr) 
library(ggplot2) 

df <- df %>% group_by(year) %>% mutate(pos = cumsum(quantity)- quantity/2) 

ggplot(data=df, aes(x=factor(1), y=quantity, fill=factor(prod))) + 
    geom_bar(stat="identity") + 
    geom_text(aes(x= factor(1), y=pos, label = quantity), size=10) + # note y = pos 
    facet_grid(facets = .~year, labeller = label_value) + 
    coord_polar(theta = "y") 

pie

+0

Potrebbe spiegare la logica di come si calcola la posizione dei numeri? – Kots

Problemi correlati