2016-07-31 2 views
3

Я пытаюсь добавить процентные метки к кольцевой диаграммы, но не увенчались успехом в построении четкого представления процентных значений (округленный и не дублируют друг друга)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: How to add percentage labels to a donut chart & Rounding % Labels on bar chart in ggplot2

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

Спасибо

donutchart

ответ

6

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

enter image description here

+0

спасибо @thisisrg ggrepel решает проблему – Beaver

Смежные вопросы