Процентные метки кольцевой диаграммы ggplot

Я пытаюсь добавить процентные метки к кольцевой диаграмме, но мне не удалось построить четкое представление процентных значений (округленных и не перекрывающихся)

## 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))

Все подготовлено для нанесения. Возможно, я сделал это своеобразным способом, поскольку мне нужно создать несколько пончиков для других категорий, связанных с цветом, но я не могу понять это (грани?).

## 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

Я играл со следующим кодом:

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)

Но это увеличивает ymax до 100,1. Доведение его до 3 знаков после запятой помогает, но не сортирует перекрытие.

Я также сталкивался с geom_label и geom_text ggplot2: как добавить процентные метки к кольцевой диаграмме и округление % Метки на гистограмме в ggplot2

Во всяком случае, если коротко. Любые советы, которые помогут сформировать приведенный выше код ^, чтобы я получил округленные процентные метки рядом с моей кольцевой диаграммой без перекрытия?

Спасибо

пончиковая диаграмма


person Beaver    schedule 31.07.2016    source источник


Ответы (1)


Для округления мы могли бы заменить процент на round(percentage,2), а для перекрытия мы могли бы использовать geom_label_repel из пакета 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

Обратите внимание, что есть предупреждения, созданные с помощью ggrepel (также я пропустил шаг изменения порядка цветов, не стесняйтесь исправлять/комментировать):

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

введите описание изображения здесь

person thisisrg    schedule 31.07.2016