ggplot заказ кластерного барплота - PullRequest
2 голосов
/ 27 марта 2020

Код для воспроизведения проблемы, которую я имею:

library("data.table")
library("ggplot2")
DT<-data.table(team=c("Q1","Q2","Q3"), mon=c(3,5,2), tues=c(4,2,1), weds=c(4,2,5))
DT<-melt(DT,id.vars = "team", measure.name = c("mon","tues","weds"))
chartdata<-DT[,.(team, day=variable, score=value)]
ggplot(chartdata, aes(fill=day, y=score, x=team)) +#reorder(data3$Insurer, if(thisdir=="asc") {value} else {-value}))) + 
  geom_bar(position="dodge", stat="identity") 

Это создает кластеризованную диаграмму. Мне нужно установить порядок по счету в понедельник (по убыванию), но я не вижу способа сделать это. Я попытался:

ggplot(chartdata, aes(fill=day, y=score, x=reorder(team, {-score}))) + 
  geom_bar(position="dodge", stat="identity") 

, но это похоже на сортировку данных, измеренных по сумме понедельник - среда, а не только понедельник, как я хочу.

Возможно ли это? Большое спасибо!

1 Ответ

2 голосов
/ 27 марта 2020

Вы можете отсортировать ваш кадр данных перед построением на ggplot2 и зафиксировать уровни коэффициента переменной, используемой для оси x:

library(dplyr)
library(ggplot2)

chartdata %>% 
  arrange(day, -score) %>% 
  mutate(team = factor(team, unique(team))) %>%
  ggplot(aes(x = team, y = score, fill = day))+
  geom_col(position = position_dodge())

enter image description here

Это то, что вы ищете?

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