Нашел свой старый файл, решил поделиться. Создание нормированной гистограммы в R было делом нетривиальным, хотя сам тип диаграммы очень распространенный. Может быть сейчас уже что-то придумано более удобное, но на тот момент (года два назад) я не видел ничего удобного для создания нормированных гистограмм в R.
Мой код мне самому не кажется идеальным, особенно в части разнесения значений ячеек, поэтому не претендую на идеальность. Буду рад вашим комментариям и исправлениям.
Итак
Нормированная гистограмма в R
# необходимые пакеnы для работы library("dplyr") library(ggplot2)Далее я создам выборку из двух категориальных переменных, в каждой переменной по два уровня фактора. Можно больше, но это уже вопрос тренировки.
a = sample(c("наши", "не наши"), 1000, replace = TRUE) b = sample(c("русские", "не русские"), 1000, replace = TRUE) c = as.data.frame(cbind(a,b))Собственно нормированная диаграмма в R
# делаем таблицу сопряженности d = table(c$a, c$b) # получим %, например по строкам e = prop.table(d, 1) # получим дата фрейм tab = data.frame(e) # дадим новые имена переменным tab = rename(tab, наши=Var1, русские=Var2, проценты=Freq) # приукрасим проценты tab$проценты = round(tab$проценты*100, digits=1)делаем первый драфт диаграммы
ggplot(tab,aes(x = наши, y = проценты, fill = русские)) + geom_bar(stat="identity") + scale_y_continuous("", breaks=c(0, 25, 50, 75, 100), label=c("0%", "25%", "50%", "75%", "100%")) + theme(text = element_text(size=30)) + theme(legend.position = "bottom", legend.title = element_blank()) + scale_fill_manual(values=c( "purple2", "red2")) + geom_text(aes(label=paste(проценты,"%",sep=""),y= проценты), color="white" ,size=15)Драфт первый, потому что вы видите, как значения ячеек налеплены. Их надо разнести. Вот здесь я как раз споткнулся: можно написать код для таблицы 2Х2, 3Х2 и т.п.. с тем, чтобы лепить значения ячеек по месту, но я не могу написать код для таблицы nХn. Поэтому просто тупо руками указываю значения координат. Задаю переменную координат
tab$координаты = c(72, 28, 24, 78)У вас координаты могут быть другими. А далее в geom_text указываю y= координаты вместо y= проценты.
ggplot(tab,aes(x = наши, y = проценты, fill = русские)) + geom_bar(stat="identity") + scale_y_continuous(breaks=c(0, 25, 50, 75, 100), label=c("0%", "25%", "50%", "75%", "100%")) + theme(text = element_text(size=30)) + theme(legend.position = "bottom", legend.title = element_blank(), axis.title.x=element_blank(), axis.title.y=element_blank()) + scale_fill_manual(values=c( "purple2", "red2")) + geom_text(aes(label=paste(проценты,"%",sep=""),y= координаты), color="white" ,size=15)И получаем нормированную диаграмму в R.
Ну и в реальной жизни я из этого кода получаю вот такие нормированные гистограммы в R
Надеюсь, было полезно
__________________________________________________________
На этом все, читайте нас в фейсбуке и телеграмме
Комментариев нет:
Отправить комментарий