2017-12-04 1 views
1

Beispieldaten

data <- data.frame(Country = c("Mexico","USA","Canada","Chile"), Per = c(15.5,75.3,5.2,4.0)) 

ich die Position der Etiketten setzen versucht.ggplot2 Kreisdiagramm schlechte Position der Etiketten

ggplot(data =data) + 
geom_bar(aes(x = "", y = Per, fill = Country), stat = "identity", width = 1) + 
coord_polar("y", start = 0) + 
theme_void()+ 
geom_text(aes(x = 1.2, y = cumsum(Per), label = Per)) 

Aber Tortendiagramm tatsächlich aussehen:

Pie chart

Antwort

1

Sie haben die Daten zu sortieren, bevor die kumulative Summe zu berechnen. Dann können Sie die Etikettenposition optimieren, z. durch Subtrahieren Hälfte Per:

library(tidyverse) 
data %>% 
    arrange(-Per) %>% 
    mutate(Per_cumsum=cumsum(Per)) %>% 
ggplot(aes(x=1, y=Per, fill=Country)) + 
    geom_col() + 
    geom_text(aes(x=1,y = Per_cumsum-Per/2, label=Per)) + 
    coord_polar("y", start=0) + 
    theme_void() 

enter image description here

PS: geom_col verwendet stat_identity standardmäßig: es lässt die Daten gibt.

Oder einfach position_stack

data %>% 
    ggplot(aes(x=1, y=Per, fill=Country)) + 
    geom_col() + 
    geom_text(aes(label = Per), position = position_stack(vjust = 0.5))+ 
    coord_polar(theta = "y") + 
    theme_void() 

enter image description here

Von Hilfe verwenden:

# To place text in the middle of each bar in a stacked barplot, you 
# need to set the vjust parameter of position_stack() 
Verwandte Themen