Pertanyaan label persentase ggplot donat grafik


Saya mencoba menambahkan label persentase ke bagan donat tetapi tidak berhasil dalam merencanakan representasi yang jelas dari nilai persentase (dibulatkan dan tidak tumpang tindih)

## my data
library(ggplot2)
col <- c("white", "black", "transparent", "grey", "blue", "yellow", "green", "red", "pink", "orange", "brown")
freq <- c(101, 68, 34, 18, 14, 5, 5, 3, 2, 1, 1)
## create data frame
colour.df <- data.frame(col, freq)
colour.df

## calculate percentage 
colour.df$percentage = colour.df$freq / sum(colour.df$freq)* 100
colour.df = colour.df[rev(order(colour.df$percentage)), ]
colour.df$ymax = cumsum(colour.df$percentage)
colour.df$ymin = c(0, head(colour.df$ymax, n = -1))
colour.df

## reorder colour levels
colour.df$col <- reorder(colour.df$col,
                             new.order = c(10, 1, 9, 5, 2, 11, 4, 8, 7, 6, 3))

Semua disiapkan untuk merencanakan. Saya mungkin telah melakukan ini cara yang aneh karena saya harus menghasilkan beberapa donat untuk kategori lain yang melibatkan warna, tapi saya tidak bisa mendapatkan kepala saya bulat itu (aspek?).

## DONUNT ##
donut = ggplot(colour.df, aes(fill = col, ymax = ymax, ymin = ymin, xmax = 100, xmin = 80)) +
geom_rect(colour = "black") +
coord_polar(theta = "y") + 
xlim(c(0, 100)) +
geom_label(aes(label = paste(percentage,"%"), x = 100, y = (ymin + ymax)/2),
         inherit.aes = F, show.legend = F, size = 5) + 
theme(legend.title = element_text(colour = "black", size = 16, face = "bold"), 
    legend.text = element_text(colour = "black", size = 15), 
    panel.grid = element_blank(),
    axis.text = element_blank(),
    axis.title = element_blank(),
    axis.ticks = element_blank()) +
annotate("text", x = 0, y = 0, size = 15, label = "Micro")
donut

Saya telah bermain-main dengan kode berikut:

colour.df$percentage = colour.df$freq / sum(colour.df$freq)* 100
## to this
colour.df$percentage = round(colour.df$freq / sum(colour.df$freq)* 100, digits = 1)

Tapi itu mengetuk ymax ke 100.1. Membawa hingga 3 angka desimal membantu, tetapi tidak mengurutkan tumpang tindih.

Saya juga telah menabrak kepala dengan geom_label & geom_text ggplot2: Cara menambahkan label persentase ke bagan donat & Pembulatan% Label pada bagan batang di ggplot2

Pokoknya panjang cerita pendek. Ada tips untuk membantu membentuk kode ^ di atas sehingga saya mendapatkan label persentase yang membulat di samping bagan donat saya, tanpa tumpang tindih?

Terima kasih

donutchart


5
2017-07-31 11:02


asal


Jawaban:


Untuk pembulatan kita bisa mengganti persentase dengan putaran (persentase, 2) dan untuk tumpang tindih kita bisa menggunakan geom_label_repel dari paket ggrepel

library(ggrepel)
donut = ggplot(colour.df, aes(fill = col, ymax = ymax, ymin = ymin, xmax = 100, xmin = 80)) +
    geom_rect(colour = "black") +
    coord_polar(theta = "y") + 
    xlim(c(0, 100)) +
    geom_label_repel(aes(label = paste(round(percentage,2),"%"), x = 100, y = (ymin + ymax)/2),inherit.aes = F, show.legend = F, size = 5)+
    theme(legend.title = element_text(colour = "black", size = 16, face = "bold"), 
        legend.text = element_text(colour = "black", size = 15), 
        panel.grid = element_blank(),
        axis.text = element_blank(),
        axis.title = element_blank(),
        axis.ticks = element_blank()) +
    annotate("text", x = 0, y = 0, size = 15, label = "Micro")
    donut

Perhatikan bahwa ada peringatan yang diproduksi dengan ggrepel (Juga saya melewatkan langkah tingkat warna penyusunan ulang, jangan ragu untuk mengoreksi / berkomentar):

In min(x) : no non-missing arguments to min; returning Inf
In max(x) : no non-missing arguments to max; returning -Inf

enter image description here


10
2017-07-31 20:26