#r #ggplot2 #bar-chart
#r #ggplot2 #гистограмма
Вопрос:
Я пытаюсь сделать гистограмму
Данные находятся в dataframe. В этих фреймах данных у меня есть несколько столбцов, один с именем ID и другой count.
Сначала я пытаюсь сгруппировать это количество. На гистограмме мы должны видеть: count = 0, count = 1, count = 2, count> = 3
Некоторые примеры данных
data1 <- data.frame(ID="ID_1", count=(rep(seq(0,10,by=1),each=4)))
data2 <- data.frame(ID="ID_2", count=(rep(seq(0,10,by=1),each=4)))
data3 <- data.frame(ID="ID_3", count=(rep(seq(0,10,by=1),each=4)))
Очевидно, что здесь гистограммы фреймов данных будут выглядеть одинаково
Я пытался сделать это в ggplot (это совсем не приятно)
ggplot(data1)
geom_bar(aes(x = ID, fill = count),position = "fill")
geom_bar(data=data2,aes(x = ID, fill = count),position = "fill")
geom_bar(data=data3,aes(x = ID, fill = count),position = "fill")
Я получил что-то вроде этого
То, что я пытаюсь сделать, это иметь разные группы внутри гистограммы, например, долю отсчетов 0, долю отсчетов 1,2 и долю отсчетов, большую (и равную) 3.
Я ожидаю чего-то подобного
Но, конечно, в моем примере гистограммы будут выглядеть одинаково. Также, если у вас есть какие-либо предложения по изменению оси Y с 1.00 до 100%.
Также одна из моих проблем заключается в том, что длина моих реальных фреймов данных не равна, но это не должно иметь значения, потому что я пытаюсь получить процент от группы подсчета
Ответ №1:
Вам нужно поместить все данные в 1 фрейм данных в длинном формате. Затем приведите свои подсчеты к факторам, и это сработает.
ggplot(bind_rows(data1, data2, data3))
geom_bar(aes(x = ID, fill = as.factor(count)), position = "fill")
scale_y_continuous(labels=scales::percent) # To get the Y axis in percentage
Комментарии:
1. Чтобы получить процент в y, добавьте ` scale_y_continuous (labels = scales::percentage)` в результирующий график.
2. Спасибо, на самом деле это работает с примерами данных. Но я только что заметил, что у меня проблема с моими реальными данными. Длина фреймов данных не равна. Есть идеи, как с этим справиться?
3. @Nono_sad Имеют ли df одинаковые столбцы ? Им не обязательно иметь одинаковое количество строк .
4. @RuiBarradas Да, у них одинаковые столбцы
5. @Nono_sad Затем попробуйте код в ответе, похоже, он не зависит от df с равным количеством строк.
Ответ №2:
Итак, я сделал кое-что, чтобы попытаться создать свою гистограмму
data1$var="first"
data2$var="second"
data3$var="third"
data4$var="fourth"
data5$var="fifth"
full_data=rbind(data1,data2,data3,data4,data5)
ggplot(ppgk)
geom_bar(aes(x = var, fill = as.factor(Count)), position = "fill")
scale_y_continuous(labels=scales::percent)
Итак, я получил что-то вроде этого :
Если у кого-то есть решение для создания другой группы подсчетов: count = 0, count = 1, count = 2, count> = 3
Комментарии:
1. Это другой вопрос. Вы должны открыть новое сообщение, чтобы задать свой вопрос, и принять ответ на этот пост, если он решил ваш первый вопрос.
2. При этом ответ заключается в создании нового столбца
count_grouped
, гдеcount_grouped = count
ifcount < 3
иcount_grouped = 3
ifcount >= 3
. Затем вы можете использоватьcount_grouped
в качестве эстетики вместоcount
.