2015-11-28 3 views
1

У меня есть кадр данных lot_main который выглядит следующим образом: enter image description hereперезаказа увернуться бар участки (ggplot2)

Я хочу, чтобы сделать бар участок с колоннами сортирует по WordCount.

library(ggplot2) 
library(viridis) 
lotr_main %>% ggplot(aes(x = Character, y = wordcount, fill = Film)) + 
geom_bar(stat="identity",position = "dodge") + 
coord_flip() + 
scale_fill_viridis("Film",discrete = TRUE, option = "C") 

Участок я получил: enter image description here

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

+1

Добро пожаловать в stackoverflow (SO)! Скорее всего, мы сможем помочь вам, если вы сделаете минимальный воспроизводимый пример, чтобы согласиться с вашим вопросом. Что-то, с чем мы можем работать и использовать, чтобы показать вам, как можно решить вашу проблему. Вы можете посмотреть [это сообщение SO] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) о том, как сделать отличный воспроизводимый пример в R Кроме того, было бы полезно, если бы вы наметили, что вы уже пробовали. –

ответ

1

Это старт. Найдено данные и вдохновение here (код ниже)

LoTRdata

LoTRdata <- structure(list(Film = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 3L, 
3L, 3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("The Fellowship Of The Ring", 
"The Return Of The King", "The Two Towers"), class = "factor"), 
    Race = structure(c(1L, 1L, 2L, 2L, 3L, 3L, 1L, 1L, 2L, 2L, 
    3L, 3L, 1L, 1L, 2L, 2L, 3L, 3L), .Label = c("Elf", "Hobbit", 
    "Man"), class = "factor"), Gender = structure(c(1L, 2L, 1L, 
    2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L 
    ), .Label = c("Female", "Male"), class = "factor"), Words = c(1229L, 
    971L, 14L, 3644L, 0L, 1995L, 331L, 513L, 0L, 2463L, 401L, 
    3589L, 183L, 510L, 2L, 2673L, 268L, 2459L)), .Names = c("Film", 
"Race", "Gender", "Words"), class = "data.frame", row.names = c(NA, 
-18L)) 


LoTRdataOrder <- LoTRdata[order(LoTRdata$Words, LoTRdata$Film) , ] 

# install.packages("ggplot2", dependencies = TRUE) 
require(ggplot2) 

p <- ggplot(LoTRdataOrder, aes(x = Race, y = Words, fill = Film)) 
p + geom_bar(stat = "identity", position = "dodge") + 
    coord_flip() + guides(fill = guide_legend()) 
1

Вы по существу хотите наполнить одну вещь, и порядок другой. Таким образом, решение должно выделять их отдельно и создавать отдельную переменную «порядок». Следует отметить, что я не знаю, если сортировку баров по значению вместо того, чтобы ту же последовательность, каждая «группа» делает ваш участок более понятно .....

создать некоторые данные:

library(data.table) 


set.seed(123) 
dat <- expand.grid(group=LETTERS[1:3], 
        subgroup=LETTERS[1:3]) 
dat$value <- runif(nrow(dat)) 
setDT(dat) 

Создать переменная порядок:

dat[,order:=order(value),by=group] 

Создать сюжет

p1 <- ggplot(dat, aes(x=group,y=value, fill=subgroup,group=order))+ 
    geom_bar(aes(group=order),position="dodge", stat="identity") + 
    coord_flip() 
p1 

enter image description here

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