2016-11-23 3 views
1

Проблема, с которой я сталкиваюсь, очень проста.ggplot2, geom_text и заказ

Я строю 3 типа данных в гистограмме с процентами по оси Y и раскрашивая каждую группу, используя другой столбец из моего блока данных.

График выглядит следующим образом:

graph

генерируется с

ggplot(cleaned_data, aes(x = Engine, fill = Errorcat)) + 
    geom_bar(aes(y = (..count..)/sum(..count..))) + 
    scale_y_continuous(labels = percent) + 
    scale_fill_discrete("Events", breaks = c("Ok", "Waiting", "Error")) + 
    labs(y = "") 

Эти данные были учтены следующим образом: cleaned_data $ Errorcat < - фактор (cleaned_data $ Errorcat, уровни = c («Ошибка», «ОК», «Ожидание»))

Я просто хочу показать соответствие в процентах в середине каждого бункера. Так что я вернулся и просто добавил geom_text вызов, как это:

ggplot(cleaned_data, aes(x = Engine, fill = Errorcat)) + 
    geom_bar(aes(y = (..count..)/sum(..count..))) + 
    geom_text(aes(y = ((..count..)/sum(..count..)) - 0.5* (((..count..)/sum(..count..))) , 
       label = scales::percent((..count..)/sum(..count..))), stat = "count", vjust = -0.25, check_overlap = TRUE) + 
    scale_y_continuous(labels = percent) + 
    scale_fill_discrete("Events", breaks = c("Ok", "Waiting", "Error")) + 
    labs(y = "") 

Он производит это:

Graph 2

Цифры правы, только их respectives Y координаты не в правильном заказ. Как вы можете видеть, 45%, например, это «верхняя» фигура, в то время как она должна соответствовать синему, а не зеленому. снизу вверх, я думаю, что geom_text отображает красный/синий/зеленый, в то время как я хочу точно так же, как полосы красного/зеленого/синего.

Я не могу понять, как я могу это сделать, и почему он не делает это сразу. Конечная цель состоит в том, чтобы иметь определенный цвет, присвоенный Errorcat. Я хочу, чтобы Ok был зеленым, ожидая, что он будет синим, и Ошибка будет красной. И легенда, которую я хочу, Ок сверху, а затем - Ошибка.

Если кто-то был бы любезен, чтобы объяснить, что мне не хватает ... Спасибо!

+0

Является основным фактором ваших факторов в «Событиях», отличающихся от порядка, в котором вы указали 'breaks' –

+0

Это действительно другое. 'cleaned_data $ Errorcat <- factor (cleaned_data $ Errorcat, levels = c (" Error "," Ok "," Waiting "))' Я хочу, чтобы Ok был зеленым, ожидая синий и красный, и легенда упорядочиваться так, как есть, то есть сначала сначала, а затем ждать, затем ошибка. – homer3018

+1

В ggplot2 2.2.0 вам понадобится нечто вроде 'geom_text (aes (y = (..count ..)/sum (.. count ..), label = scale: percent ((.. count.)) /sum(..count ..))), stat = "count", check_overlap = TRUE, position = position_stack (vjust = .5)) ' – aosmith

ответ

0

Резюме вышеуказанных замечаний, следующий код производит все этикетки на нужном месте, сосредоточенных в каждом бункере:

ggplot(cleaned_data, aes(x = Engine, fill = Errorcat)) + 
    geom_bar(aes(y = (..count..)/sum(..count..))) + 
    geom_text(aes(y = (..count..)/sum(..count..), label = scales::percent((..count..)/sum(..count..))), 
      stat = "count", check_overlap = FALSE, position = position_stack(vjust = 0.5)) + 
    scale_y_continuous(labels = percent) + 
    scale_fill_discrete("Events", breaks = c("Ok", "Waiting", "Error")) + 
    labs(y = "") 

Спасибо всем.

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