2016-10-19 9 views
0

Ich habe eine piechart Verwendung ggplot2 Bibliothek wie folgt:Formatieren von Zahlen in ggplot

ggplot(dat, 
     aes(x = factor(""), fill = workers)) + 
     geom_bar() + 
     coord_polar(theta = "y") + 
     scale_x_discrete("") 

Das Problem besteht darin, daß die Zahlen (count) als 2e+05 gezeigt. Wie kann ich sie als 20000 zeigen?

Update:

dat <- data.frame(workers=c("Q8","A2","S1","A2","A2","S1")) 
+0

Sie sollten ein reproduzierbares Beispiel veröffentlichen. Die Antwort liegt wahrscheinlich in der Überlagerung von 'scale_y_continuous' mit einem 'label'-Argument, wobei angegeben wird, welche Formatierung die Variable count annehmen soll, möglicherweise durch einen Aufruf von' format'. – shayaa

+0

@shayaa: Ich habe das reproduzierbare Beispiel hinzugefügt, aber dieses Beispiel zeigt nicht offensichtlich das Problem mit e + 05, weil ich nicht so viele Zeilen posten kann. – FiofanS

+0

kann Ihre Formatierung nicht reproduzieren, selbst wenn Sie Ihre Daten millionenfach replizieren, um die Zählwerte im 1e6-Bereich zu erhalten. Ihr Problem könnte 'scipen' in 'Optionen' sein. – shayaa

Antwort

1

können Sie scales::comma verwenden, um dies zu handhaben (und auch leicht ein reproduzierbares Beispiel machen, auch mit einer großen Menge von Daten):

library(ggplot2) 

dat <- data.frame(
    workers = c(
    rep("Q8", 100000), 
    rep("A2", 200000), 
    rep("S1", 200000) 
) 
) 

ggplot(dat, aes(x = factor(""), fill = workers)) + 
    geom_bar() + 
    coord_polar(theta = "y") + 
    scale_x_discrete(name="") + 
    scale_y_continuous(label=scales::comma) + 
    theme_bw() + 
    theme(panel.grid=element_blank()) + 
    theme(panel.border=element_blank()) + 
    theme(axis.ticks=element_blank()) 

, die diese produziert Monstrosität:

Beachten Sie, dass Sie die Achsennummern "y" wirklich nicht anzeigen sollten, da sie in diesem Kontext keinen Sinn machen und die Kreissegmente entweder direkt beschriften oder den tatsächlichen Legendenbeschriftungen den Wert # 's hinzufügen sollten.

Aber könnte ich zu einer anderen vis schlagen drehen:

library(waffle) 
library(dplyr) 

count(dat, workers) %>% 
    mutate(trim=n/10000) -> df2 

parts <- setNames(unlist(df2$trim), df2$workers) 

waffle(parts, rows=4, title="Count", xlab="Each square represents 10,000 workers") 

enter image description here

Wenn Sie die GitHub-Version verwenden ggplot2 Sie tun müssen, werden:

waffle(parts, rows=4, title="Count", xlab="Each square represents 10,000 workers") + 
    scale_fill_manual(name="workers", 
        values=c(Q8="#e41a1c", A2="#377eb8", S1="#4daf4a"), 
        na.translate=FALSE) 

da es ein anderes Verhalten als die CRAN Version hat (das waffle Paket wird aktualisiert, wenn das neue ggplot2 auf CRAN ist).

+0

Danke für die Idee bezüglich der Visualisierung. Nur eine kleine Frage: der Befehl 'waffle (Teile, Zeilen = 4, title =" Count ", xlab =" Jedes Quadrat repräsentiert 10.000 Agenten ")' gibt mir einen Fehler 'Fehler: Unzureichende Werte im manuellen Maßstab. 45 benötigt, aber nur 8 zur Verfügung gestellt., Obwohl es nicht mit diesem Thema verwandt ist, aber können Sie erklären, warum habe ich diesen Fehler? – FiofanS

Verwandte Themen