Сортировка соседней гистограммы по одному столбцу, ggplot2 - PullRequest
0 голосов
/ 21 ноября 2018

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

Пример соседней линейчатой ​​диаграммы

library(ggplot2)

a<-(c(1:10))
e<-c("group a","group b", "group c", "group d", "group e", "group a","group b", "group c", "group d", "group e")
fillvariable<-c(1,2,2,1,2,2,1,1,2,1)
data<-cbind(a,e,fillvariable)
data<-as.data.frame(data)
data

plot <- ggplot(data, aes(x=e, y=a,fill=factor(fillvariable))) + geom_bar(stat = "identity", position = 'dodge')

plot

Я бы хотел отсортировать столбцы численно по левой (красной) полосе (см. Пример столбчатой ​​диаграммы).Моя реальная ось X имеет много групп, поэтому было бы не просто набрать каждую метку и установить порядок таким образом.Кто-нибудь есть предложение о том, как сделать это с помощью функции в R?

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

sample bar output

1 Ответ

0 голосов
/ 21 ноября 2018

Я бы сделал это так:

# isolate the subset of data you want to order by
subset_to_order = subset(data, fillvariable == 1)
# use reorder to reorder the factor
subset_to_order$e = with(subset_to_order, reorder(e, a))

# apply the same order to the whole data
data$e = factor(data$e, levels = levels(subset_to_order$e))

plot <- ggplot(data, aes(x=e, y=a,fill=factor(fillvariable))) + geom_col(position = 'dodge')
plot

enter image description here

Комментарий MrFlick показывает аналогичный путь.По сути, ваш вопрос такой же, как и в R-FAQ о упорядоченных барах в ggplot2 , но с изюминкой, что порядок определяется подмножеством данных вместо целых данных.Мы используем то же решение, адаптируя его, чтобы найти способ игнорировать части данных, которые не имеют значения для упорядочения.Я сделал это с явным подмножеством, комментарий MrFlick делает это, обнуляя другие части с помощью ifelse.Оба прекрасно работают.

Я также переключил ваши geom_bar(stat = "identity") to geom_col () , which is preferred in the last few ggplot` релизы.

Это зависит от того, чтобы не испортить классы ваших столбцов.Когда вы используете cbind, вы неявно конвертируете в матрицу, что плохо при смешивании числовых и строковых / факторных столбцов.Сохраните его как фрейм данных, и все должно быть хорошо.

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