2016-06-06 55 views
5

Sto cercando di disegnare etichette che sembrano informative, chiare e ordinate.Formattazione personalizzata dell'asse e dell'etichetta ggplot2

I was following example e sollevato ancora una domanda sulla formattazione label e axis.

Ad esempio, ho dati di vendita che includono Marchio, Categorie e Spesa in EUR. Quando la somma di EUR è grande (milioni o più) le etichette sembrano davvero difficili da leggere e non informative.

Come risultato, x-axis è in Scientific notation e sembra davvero non pulito.

Sono riuscito a formattare le etichette in modo personalizzato: mostra Eur in migliaia. geom_text(aes(label= paste(round(EUR/1000,0),"€"), y=pos), colour="white") C'è un modo più semplice o automatico?

Come Scientific notation sembra davvero poco chiaro, per l'asse ho provato a utilizzare scale_y_continuous(formatter = "dollar"), ma questo sembra non funzionare. Inoltre, non è stato possibile trovare se è stato implementato anche lo Eur anziché il dollaro. Credo che sarebbe il migliore per mostrare y-axis in thousands. Qualche soluzione?

Inoltre, allego esempio riproducibile:

library(plyr) 
library(dplyr) 
library(ggplot2) 
library(scales) 


set.seed(1992) 
n=68 

Category <- sample(c("Black", "Red", "Blue", "Cyna", "Purple"), n, replace = TRUE, prob = NULL) 
Brand <- sample("Brand", n, replace = TRUE, prob = NULL) 
Brand <- paste0(Brand, sample(1:5, n, replace = TRUE, prob = NULL)) 
EUR <- abs(rnorm(n))*100000 

df <- data.frame(Category, Brand, EUR) 


df.summary = df %>% group_by(Brand, Category) %>% 
    summarise(EUR = sum(EUR)) %>% # Within each Brand, sum all values in each Category 
    mutate(pos = cumsum(EUR)-0.5*EUR) 



ggplot(df.summary, aes(x=reorder(Brand,EUR,function(x)+sum(x)), y=EUR, fill=Category)) + 
    geom_bar(stat='identity', width = .7, colour="black", lwd=0.1) + 
    geom_text(aes(label=ifelse(EUR>100,paste(round(EUR/1000,0),"€"),""), 
       y=pos), colour="white") + 
    coord_flip()+ 
    labs(y="", x="") 

enter image description here

risposta

8

È possibile impostare il prefisso dollar_format per euro anziché in dollari:

scale_y_continuous(labels=dollar_format(prefix="€")) + 

che si prende cura della notazione scientifica problema.

Per ottenere tutto in migliaia, è possibile dividere per 1000 quando si crea il riepilogo. Per ridurre il disordine, si può lasciare fuori il simbolo dell'euro nelle etichette a barre, ma ho mantenuto il simbolo nel seguente esempio:

df.summary = df %>% group_by(Brand, Category) %>% 
    summarise(EUR = sum(EUR)/1000) %>% # Within each Brand, sum all values in each Category 
    mutate(pos = (cumsum(EUR)-0.5*EUR)) 

ggplot(df.summary, aes(x=reorder(Brand,EUR,function(x)+sum(x)), y=EUR, fill=Category)) + 
    geom_bar(stat='identity', width = .7, colour="black", lwd=0.1) + 
    geom_text(aes(label=ifelse(EUR>100,paste0("€", round(EUR,0)),""), 
       y=pos), colour="white") + 
    scale_y_continuous(labels=dollar_format(prefix="€")) + 
    coord_flip()+ 
    labs(y="Thousands of €", x="") 

enter image description here

+0

Qualsiasi idea per cui il simbolo '''stato'' è mostrato come' ??? '? – AK47

0

@ AK47 c'è un problema di analisi dell'Euro accedi lucente.

provare a sostituire con questo: (\ u20AC)

Ha funzionato abbastanza bene per me finora.