.

Сделать репост в соц сети!

воскресенье, 21 января 2018 г.

Нормированная гистограмма в R






Нашел свой старый файл, решил поделиться. Создание нормированной гистограммы в 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
Наверное, это не очень удобно - разносить руками координаты значений ячеек, но я исхожу из того, что перегруженные уровнями и значениями нормированные диаграммы в R все равно делать никто не будет, они нечитабельны, а несколько строк и уровней разметить можно.

Ну и в реальной жизни я из этого кода получаю вот такие нормированные гистограммы в R
Нормированная гистограмма в R
Надеюсь, было полезно

__________________________________________________________
На этом все, читайте нас в фейсбуке и телеграмме



Комментариев нет:

Отправить комментарий