Построение нескольких гистограмм в R

#r

Вопрос:

Я пытаюсь построить несколько гистограмм в R-группировке по штатам (UF в Бразилии), потому что существует 27 штатов.

 UFs <- unique(ENEM$SG_UF_RESIDENCIA)
View(UFs)

for(i in UFs){
  hist(ENEM$NU_NOTA_MT, main = "Histograma Nota Matemática ENEM 2017 - 2019", 
       xlab = paste("UF: ", i), ylab = "Frequência", col = "#224e69")
}
 

Но когда я пытаюсь запустить этот код, ничего не происходит. Может ли кто-нибудь дать мне подсказку?

Ответ №1:

Я думаю, что вам нужно назначить i for циклу И указать R, что вы хотите построить несколько гистограмм одновременно (что делается с помощью par(mfrow = c( ,) :

 par(mfrow= c(2,length(unique(ENEM$SG_UF_RESIDENCIA))/2))
for(i in unique(ENEM$SG_UF_RESIDENCIA)){
  hist(ENEM[ENEM$SG_UF_RESIDENCIA == i,]$NU_NOTA_MT)
}
 

Данные об игрушках:

 ENEM <- data.frame(
  SG_UF_RESIDENCIA = sample(LETTERS[1:6], 100, replace = TRUE),
  NU_NOTA_MT = rnorm(100)
) 
 

введите описание изображения здесь

Ответ №2:

Тебе это может пригодиться by .

 op <- par(mfrow=c(5, 6), mar=c(4, 4, 2, 2) .1)
invisible(by(ENEM, ENEM$UFs, (x) 
             hist(x$NU_NOTA_MT, main='', xlab=paste("UF: ", x$UFs[1]),
                  ylab='Frequência', col='#224e69')))
par(op)
 

введите описание изображения здесь


Данные:

 set.seed(42)
ENEM <- data.frame(NU_NOTA_MT=rnorm(2600), UFs=rep(LETTERS[1:26], each=100))
 

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

1. Занимаетесь какой-нибудь группировкой?

2. @ChrisRuehlemann Просто косметика, но я добавил новые данные об игрушках, чтобы убедить вас 😉

Ответ №3:

Если у вас есть данные в длинном формате, вы можете использовать facet_wrap ggplot2 их без циклов:

 library(ggplot2)
library(dplyr)

df %>% pivot_longer(all_of(estados)) %>%
        ggplot(aes(x=value)) 
        geom_histogram() 
        ylab('frequência') 
        ggtitle("Histograma Nota Matemática ENEM 2017 - 2019") 
        facet_wrap(~name)
 

введите описание изображения здесь

данные об игрушках

 estados<-c("AC", "AL", "AP", "AM", "BA", "CE", "DF", "ES", "GO", "MA", 
"MT", "MS", "MG", "PA", "PB", "PR", "PE", "PI", "RJ", "RN", "RS", 
"RO", "RR", "SC", "SP", "SE", "TO")
set.seed(1)
df <- map_dfc(estados, ~rnorm(100)) %>% set_names(estados)