R Изменить порядок баров, сгруппированный блок-график (переменная заливки) - PullRequest
0 голосов
/ 28 января 2019

edit: я переписал весь пост, включая пример, который можно напрямую воспроизвести, а также содержащий решение, предоставленное Павлом Хабросом.Спасибо, Павел Хаброс, за очень аккуратный ответ!

На следующем рисунке я изо всех сил пытаюсь поменять местами порядок ящиков, желая изменить его с октября на декабрь, когда смотрю слева направо:

Нажмите здесь, чтобы отобразить график

Кадр данных создан

library(dplyr)
library(ggplot2)
library(forcats)

name <- c('A','A','A', 'A','A','A', 'A','A','A', 
          'B','B','B', 'B','B','B', 'B','B','B',
          'C','C','C', 'C','C','C', 'C','C','C')
month = c("oct 2018", "oct 2018", "oct 2018","nov 2018", "nov 2018", "nov 2018","dec 2018", "dec 2018", "dec 2018",
         "oct 2018", "oct 2018", "oct 2018","nov 2018", "nov 2018", "nov 2018","dec 2018", "dec 2018", "dec 2018" ,
         "oct 2018", "oct 2018", "oct 2018","nov 2018", "nov 2018", "nov 2018","dec 2018", "dec 2018", "dec 2018" )
value <- seq(1:length(month))

df = data.frame(name, month, value)
df

Фрейм данных выглядит следующим образом

name    month   value
A   oct 2018    1
A   oct 2018    2
A   oct 2018    3
A   nov 2018    4
A   nov 2018    5
A   nov 2018    6
A   dec 2018    7
A   dec 2018    8
A   dec 2018    9
B   oct 2018    10
B   oct 2018    11
B   oct 2018    12
B   nov 2018    13
B   nov 2018    14
B   nov 2018    15
B   dec 2018    16
B   dec 2018    17
B   dec 2018    18
C   oct 2018    19
C   oct 2018    20
C   oct 2018    21
C   nov 2018    22
C   nov 2018    23
C   nov 2018    24
C   dec 2018    25
C   dec 2018    26
C   dec 2018    27 

График на рисунке выше создан

wantedMonths = c("oct 2018", "nov 2018", "dec 2018")
wantedNames = c("A", "B")
df2= df[df$name %in% wantedNames, ] 
ggplot(df2[df2$month %in% wantedMonths , ])  +  geom_boxplot(aes(as.factor(name), value, fill=month))#fct_rev(month)

Команда, которая создает правильный график, предоставленный Павлом Шабросом, имеет вид

ggplot(df2[df2$month %in% wantedMonths , ])  +  geom_boxplot(aes(as.factor(name), value, fill=fct_rev(month)))

Ответы [ 3 ]

0 голосов
/ 28 января 2019

Ответ, который также включен в отредактированный вопрос, должен использовать fct_rev:

ggplot(df2[df2$month %in% wantedMonths , ])  +  geom_boxplot(aes(as.factor(name), value, fill=fct_rev(month)))
0 голосов
/ 29 января 2019

ggplot использует порядок факторов для этой цели.Вы можете установить месяц как упорядоченный коэффициент либо внутри вызова ggplot, либо изменить его ранее в данных.В этом случае просто добавьте следующую строку перед вызовом ggplot:

df[['month']] = ordered(df[['month']], levels = c('oct 2018', 'nov 2018', 'dec 2018'))
0 голосов
/ 28 января 2019

Если вашей проблемой является упорядочение панели, вы можете установить их вручную с помощью функции scale_colour_manual.Просто добавьте это при построении графиков с помощью ggplot.scale_colour_manual (values ​​= c ("красный", "зеленый", "синий"))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...