Я хочу, чтобы построить что-то подобное в R.Кластера сложен Барграф
Я нашел подобное решение here поэтому я пытался что-то подобное:
test <- data.frame(person=c("group 1", "group 2", "group 3"),
value1=c(100,150,120), # male
value2=c(25,30,45) , # female
value3=c(25,30,45), # male
value4=c(100,120,150), # female
value5=c(10,12,15), # male
value6=c(50,40,70)) # female
library(reshape2) # for melt
melted <- melt(test, "person")
melted$cat <- ''
melted[melted$variable == 'value1' | melted$variable == 'value2',]$cat <- "sub group 1"
melted[melted$variable == 'value3' | melted$variable == 'value4',]$cat <- "sub group 2"
melted[melted$variable == 'value5' | melted$variable == 'value6',]$cat <- "sub graoup 3"
p = ggplot(melted, aes(x = cat, y = value, fill = variable))
+ geom_bar(stat = 'identity', position = 'stack') + facet_grid(~ person)
Что я завершившийся является:
Проблема теперь у меня 6 разных значений с 6 различными цветами. Я действительно хочу 2 разных значения, давайте назовите тему male
и female
представленными двумя разными цветами.
Как это сделать в R? Данные могут быть построены любым другим способом (не обязательно использовать data.frame, как указано выше). Мне не нужно использовать ggplot
. Фактически, я предпочитаю белый чистый фон в примере изображения, чем серый фон, который я получил с помощью ggplot.
Спасибо за ваш ответ @sam. Я получил ошибку 'Error: No layers in plot', выполняющую этот фрагмент. Он не указывает на какую-либо строку, очень общую ошибку. – chepukha
Я попытался добавить '+ geom_line()' до конца, но получить ту же ошибку. BTW, я использую 'print (p)' для отображения графика. – chepukha
сейчас хорошо работает. Но ggplot сортирует метку 'c (" group 1 "," group 2 "," group 3 ")' и упорядочивает группы на графике согласно алфавитному порядку. Например. если у меня есть 'person = c ('Eroupean', 'Asian', 'Ameria')', тогда группа 'America' всегда отображается первой. Есть ли способ, которым я могу сказать «ggplot» просто использовать заказ, как есть? Спасибо – chepukha