2016-06-06 15 views
5

Ich versuche, Etiketten, die informativ, klar und ordentlich aussehen zu zeichnen.Benutzerdefinierte ggplot2 Achse und Label-Formatierung

I was following example und warf eine weitere Frage über label und axis Formatierung.

Zum Beispiel habe ich Verkaufsdaten, die Marke, Kategorien und Ausgaben in EUR enthält. Wenn die Summe von EUR groß ist (Millionen oder mehr), sehen die Etiketten wirklich schwer zu lesen und nicht informativ aus.

Als Ergebnis ist x-axis in Scientific notation und sieht auch wirklich unsauber aus.

Ich habe es geschafft, Etiketten in gewohnter Weise zu formatieren: es zeigt Eur in Tausend. geom_text(aes(label= paste(round(EUR/1000,0),"€"), y=pos), colour="white") Gibt es einen einfacheren oder automatisierten Weg?

Als Scientific notation sieht wirklich unklar, für die Achse habe ich versucht mit scale_y_continuous(formatter = "dollar"), aber das scheint nicht funktionieren. Außerdem konnte ich nicht feststellen, ob anstelle von Dollar auch Eur implementiert ist. Ich glaube, dass es am besten wäre, y-axis in thousands zu zeigen. Irgendwelche Lösungen?

Auch lege ich reproduzierbaren Beispiel:

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

Antwort

8

Sie das Präfix in dollar_format für Euro statt Dollar einstellen:

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

, kümmert sich um die wissenschaftliche Notation nimmt Problem.

Um alles in tausend zu erhalten, können Sie einfach durch 1000 teilen, wenn Sie die Zusammenfassung erstellen. Zur Reduzierung der Unordnung, können Sie das Euro-Symbol in der Bar Etiketten auslassen, aber ich habe das Symbol im Beispiel unten gehalten:

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

Irgendwelche Ideen, warum in 'shiny'' '' Symbol als '???' angezeigt wird? – AK47

0

@ AK47 gibt es eine Parsing-Ausgabe des Euro Melden Sie sich glänzend an.

Versuchen Sie es mit diesem ersetzen: (\ u20AC)

Es hat sich für mich ziemlich gut bisher funktioniert.