Graphique de rang ou histogramme?

Pour le #Tidytuesday de cette semaine, nous avons l’occasion de regarder des visualisations qui ont étés révisées par Sarah Leo de The Economist. Dans leur archives, elle a trouvé 7 exemples de graphiques qui avaient besion d’être revu.

CONTEXTE

Pour cette semaine, je me concentre sur son 7e exemple qui concerne la place des femmes dans le monde de la recherche avec publications.

La visualisation originale présente le pourcentage des femmes qui ont soumis des publications pour différents domaines (sciences de la santé, sciences physique, ingénérie, mathématique et sciences informatiques, inventeures) pour différents pays.

Le défi ici des d’essayer de présenter beaucoup de données dans un espace restreint.

Voici le graphique original à revoir:

OBJECTIFS

1) Explorer quelques visualisation pour voir ce qui se prête le mieux à ces données.

IMPORTER

brexit <- readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-04-16/brexit.csv")
FALSE Parsed with column specification:  
FALSE cols(  FALSE   date = col_character(),  
FALSE   percent_responding_right = col_double(),  
FALSE   percent_responding_wrong = col_double()  
FALSE )
corbyn <- readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-04-16/corbyn.csv")
FALSE Parsed with column specification:  
FALSE cols(  
FALSE   political_group = col_character(),  
FALSE   avg_facebook_likes = col_double()  
FALSE )
dogs <- readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-04-16/dogs.csv")
FALSE Parsed with column specification:  
FALSE cols(  
FALSE   year = col_double(),  
FALSE   avg_weight = col_double(),  
FALSE   avg_neck = col_double()  
FALSE )
eu_balance <- readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-04-16/eu_balance.csv")
FALSE Parsed with column specification:  
FALSE cols(  
FALSE   country = col_character(),  
FALSE   account_type = col_character(),  
FALSE   year = col_double(),  
FALSE   value = col_double()  
FALSE )
pensions <- readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-04-16/pensions.csv")
FALSE Parsed with column specification:  
FALSE cols(  
FALSE   country = col_character(),  
FALSE   pop_65_percent = col_double(),  
FALSE   gov_spend_percent_gdp = col_double()  
FALSE )
trade <- readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-04-16/trade.csv")
FALSE Parsed with column specification:  
FALSE cols(  
FALSE   year = col_double(),  
FALSE   trade_deficit = col_double(),  
FALSE   manufacture_employment = col_double()  
FALSE )
women_research <- readr::read_csv("https://raw.githubusercontent.com/rfordatascience/tidytuesday/master/data/2019/2019-04-16/women_research.csv")
FALSE Parsed with column specification:  
FALSE cols(  
FALSE   country = col_character(),  
FALSE   field = col_character(),  
FALSE   percent_women = col_double()  
FALSE )



EXPLORER

glimpse(women_research)
## Observations: 60  
## Variables: 3  
## $ country       <chr> "Japan", "Chile", "United Kingdom", "United States…  
## $ field         <chr> "Health sciences", "Health sciences", "Health scie…  
## $ percent_women <dbl> 0.24, 0.43, 0.45, 0.46, 0.46, 0.47, 0.48, 0.48, 0.…
summary(women_research)
##    country             field           percent_women     
##  Length:60          Length:60          Min.   :0.0800    
##  Class :character   Class :character   1st Qu.:0.1900    
##  Mode  :character   Mode  :character   Median :0.2250    
##                                        Mean   :0.2617    
##                                        3rd Qu.:0.2825    
##                                        Max.   :0.5700
summary<-women_research%>%
    group_by(field)%>%
    summarise(mean=mean(percent_women))

 

Les données ont déjà été travaillées ici, donc rien de ce qui est présenté dans cette table est inutilisé pour faire la visualisation. De plus, tout est déjà sous un format prêt à travailler. Par contre, pour la visualisation que j’ai en tête, il faut quand même travailler un peu pour préparer les données:

 

Pour regarder les données avec un graphique de rang: 

PRÉPARER:

rank<-women_research%>%
mutate(country=(ifelse(country=="United Kingdom", "UK", country)))%>%
mutate(country=(ifelse(country=="United States", "US", country)))%>%
mutate(field=(ifelse(field=="Computer science, maths", "Informatique, maths", field)))%>%
mutate(field=(ifelse(field=="Engineering", "Ingénérie", field)))%>%
mutate(field=(ifelse(field=="Health sciences", "Sciences de la santé", field)))%>%
mutate(field=(ifelse(field=="Physical sciences", "Sciences physique", field)))%>%
mutate(field=(ifelse(field=="Women inventores", "Inventeures", field)))%>%
spread(country, percent_women)%>%
arrange((`Australia`)) %>%
mutate(`Australia`= c(1:5))%>%
arrange((`Brazil`)) %>%
mutate(`Brazil`= c(1:5))%>%
arrange((`Canada`)) %>%
mutate(`Canada`= c(1:5))%>%
arrange((`Chile`)) %>%
mutate(`Chile`= c(1:5))%>%
arrange((`Denmark`)) %>%
mutate(`Denmark`= c(1:5))%>%
arrange((`EU28`)) %>%
mutate(`EU28`= c(1:5))%>%
arrange((`France`)) %>%
mutate(`France`= c(1:5))%>%
arrange((`Japan`)) %>%
mutate(`Japan`= c(1:5))%>%
arrange((`Mexico`)) %>%
mutate(`Mexico`= c(1:5))%>%
arrange((`Portugal`)) %>%
mutate(`Portugal`= c(1:5))%>%
arrange((`UK`)) %>%
mutate(`UK`= c(1:5))%>%
arrange((`US`)) %>%
mutate(`US`= c(1:5))%>%
gather(key=country, value=rang, -field) #changer la mise en page pour analyse



VISUALISER

#Graphique  
gg<-ggplot(data=rank, aes(x=country, y=rang, group=field, color=field))
gg<-gg + geom_line(size=3)
gg<-gg + geom_point(size=5)
#Ajouter les étiquettes de données
gg<-gg + geom_text(data = rank %>% filter(country == "Australia"), aes(label = field, x = 0.8) , hjust = 1, size = 4)
gg<-gg + scale_color_manual(values = c("#E8EBE4", "#E8EBE4", "#FE9920", "#698F3F", "#E8EBE4"))
#ajuster les axes
gg<-gg + expand_limits(x =c(-2,16))
#modifier la légende
gg<-gg + theme(legend.position="none")
#modifier le thème
gg<-gg +theme(panel.border = element_blank(),
panel.background = element_rect(fill = "#292E1E", colour = "#292E1E"),
plot.background = element_rect(fill = "#292E1E", colour = "#292E1E"),
panel.grid.major.y= element_blank(), panel.grid.major.x= element_blank(),
panel.grid.minor = element_blank(),
axis.line = element_blank(),
axis.ticks.y = element_blank(),
axis.ticks.x = element_blank())
#ajouter les titres
gg<-gg + labs(title= NULL,
subtitle=NULL,
y=NULL,
x=NULL)
gg<-gg + theme( plot.title = element_text(hjust=0,size=25, color="#E8EBE4"),
plot.subtitle = element_text(hjust=0,size=18, color="#E8EBE4"),
axis.title.y = element_blank(), axis.title.x = element_blank(),
axis.text.y = element_blank(),
axis.text.x = element_text(hjust=0.5, size=10, color="#E8EBE4"))
#Ajouter les étiquettes de données
gg<-gg + annotate(geom="text", x=12.3,y=5, label="Les sciences de la santé sont le\ndomaine de recherche ou les\nfemmes sont les plus présentes.\nEn moyenne 47% des publications\nsont faites par des femmes.", color="#698F3F", size=4, hjust=0,vjust=0.9)
gg<-gg + annotate(geom="text", x=12.3,y=3, label="L'ingénierie, l'informatique, les\nmathématiques et les sciences\nphysiques sont des domaines où\n23% des articles sont publiés par\nune femme.", color="#E8EBE4", size=4, hjust=0,vjust=0.5)
gg<-gg + annotate(geom="text", x=12.3,y=1, label="Inventeurs est le domaine le moins\nreprésenté par la femme. En\nmoyenne, seulement 15% des\narticles sont publiés par une femme.", color="#FE9920", size=4, hjust=0, vjust=0.1)

 

Voici ce que ça donne:

Pour regarder les données avec un histogramme:

PRÉPARER:

bar<-women_research%>%
mutate(country=(ifelse(country=="United Kingdom", "UK", country)))%>%
mutate(country=(ifelse(country=="United States", "US", country)))%>%
mutate(field=(ifelse(field=="Computer science, maths", "Informatique, maths", field)))%>%
mutate(field=(ifelse(field=="Engineering", "Ingénérie", field)))%>%
mutate(field=(ifelse(field=="Health sciences", "Sciences de la santé", field)))%>%
mutate(field=(ifelse(field=="Physical sciences", "Sciences physique", field)))%>%
mutate(field=(ifelse(field=="Women inventores", "Inventeures", field)))



VISUALISER

#Graphique  
gg<-ggplot(data=bar, aes(x=country, y=percent_women, group=field, fill=field))
gg<-gg + geom_bar(stat="identity", width = 0.65)
gg<-gg + scale_fill_manual(values = c("#E8EBE4", "#E8EBE4", "#FE9920", "#698F3F", "#E8EBE4"))
gg<-gg +geom_hline(data = bar, aes(yintercept = 0),color="#E8EBE4", size=1.5)
gg<-gg + facet_wrap((factor(field,levels=c("Sciences de la santé","Ingénérie","Informatique, maths","Sciences physique", "Inventeures")) ~ .), ncol=1)
gg<-gg + theme(strip.text.x = element_text(size=12, face="bold", hjust=0, color="#E8EBE4"),
strip.background = element_rect(colour="#292E1E", fill="#292E1E"))
#ajuster les axes
gg<-gg + scale_y_continuous(labels = function(x) paste0(x*100, "%"), limits =c(0, 1))
#modifier la légende
gg<-gg + theme(legend.position="none")
#modifier le thème
gg<-gg +theme(panel.border = element_blank(),
panel.background = element_rect(fill = "#292E1E", colour = "#292E1E"),
plot.background = element_rect(fill = "#292E1E", colour = "#292E1E"),
panel.grid.major.y= element_blank(),
panel.grid.major.x= element_blank(),
panel.grid.minor = element_blank(),
axis.line.x = element_blank(),
axis.line.y = element_line(linetype = "solid", size=1, color="#E8EBE4"),
axis.ticks.y = element_line(linetype = "solid", size=0.3, color="#E8EBE4"),
axis.ticks.x = element_blank())
#ajouter les titres
gg<-gg + labs( title= NULL,
subtitle=NULL,
y="Pourcentage des articles publiés qui l'on été par des femmes",
x=NULL)
gg<-gg + theme( plot.title = element_text(hjust=0,size=25, color="#E8EBE4"),
plot.subtitle = element_text(hjust=0,size=18, color="#E8EBE4"),
axis.title.y = element_text(hjust=0.5, size=10, color="#E8EBE4", angle=90),
axis.title.x = element_blank(),
axis.text.y = element_text(hjust=0.5, size=10, color="#E8EBE4"),
axis.text.x = element_text(hjust=0.5, size=10, color="#E8EBE4"))

 

Voici ce que ça donne:

Pour regarder les données avec un graphique de points:

PRÉPARER:

bar<-women_research%>%
mutate(country=(ifelse(country=="United Kingdom", "UK", country)))%>%
mutate(country=(ifelse(country=="United States", "US", country)))%>%
mutate(field=(ifelse(field=="Computer science, maths", "Informatique, maths", field)))%>%
mutate(field=(ifelse(field=="Engineering", "Ingénérie", field)))%>%
mutate(field=(ifelse(field=="Health sciences", "Sciences de la santé", field)))%>%
mutate(field=(ifelse(field=="Physical sciences", "Sciences physique", field)))%>%
mutate(field=(ifelse(field=="Women inventores", "Inventeures", field)))%>%
mutate(gap=0.5-percent_women)



VISUALISER

#Graphique  
gg<-ggplot(data=bar, aes(x=country, y=gap, group=field, color=factor(field, levels=c("Sciences de la santé","Informatique, maths","Ingénérie","Sciences physique","Inventeures"))))
gg<-gg + geom_point(size=5)
gg<-gg + scale_color_manual(values = c("#698F3F", "#E8EBE4", "#E8EBE4", "#E8EBE4", "#FE9920"))
gg<-gg + geom_hline(yintercept = 0, color="#E8EBE4", size=1, linetype="dotted")
gg<-gg + coord_flip()
#modifier la légende
gg<-gg + theme(legend.position="top",
legend.title = element_blank(),
legend.background = element_blank(),
legend.key=element_blank(),
legend.spacing.x = unit(0.5, 'cm'),
legend.text= element_text(hjust =0.5,size= 12, colour = "#A9A9A9"))
gg<-gg + guides(fill = guide_legend(nrow = 1, reverse = TRUE))
#modifier le thème
gg<-gg +theme(panel.border = element_blank(),
panel.background = element_rect(fill = "#292E1E", colour = "#292E1E"),
plot.background = element_rect(fill = "#292E1E", colour = "#292E1E"),
panel.grid.major.y= element_blank(),
panel.grid.major.x= element_blank(),
panel.grid.minor = element_blank(),
axis.line.x = element_line(linetype = "solid", size=1, color="#E8EBE4"),
axis.line.y = element_line(linetype = "solid", size=1, color="#E8EBE4"),
axis.ticks.y = element_line(linetype = "solid", size=0.3, color="#E8EBE4"),
axis.ticks.x = element_line(linetype = "solid", size=0.3, color="#E8EBE4"))
#ajouter les titres
gg<-gg + labs(title= NULL,
subtitle=NULL,
y="L'équart de l'équité de publication",
x=NULL)
gg<-gg + theme(plot.title = element_text(hjust=0,size=25, color="#E8EBE4"),
plot.subtitle = element_text(hjust=0,size=18, color="#E8EBE4"),
axis.title.y = element_text(hjust=0.5, size=10, color="#E8EBE4", angle=90),
axis.title.x = element_text(hjust=0.5, size=10, color="#E8EBE4"),
axis.text.y = element_text(hjust=0.5, size=10, color="#E8EBE4"),
axis.text.x = element_text(hjust=0.5, size=10, color="#E8EBE4"))

 

Voici ce que ça donne:

 

Alors, tu veux en savoir plus sur ma démarche? Un épisode de podcast est maintenant disponible dans lequel je t’explique toute la réflexion et les concepts de data visualisation qui ont menés à la création de cette viz.

Publicités

3 réflexions sur “Graphique de rang ou histogramme?

  1. Pingback: Podcast ADV #6: Reprise de la 7e visualisation de Sara Leo | Johanie Fournier, agr.

  2. Pingback: ADV5 - Des erreurs à éviter en visualisation de données | Johanie Fournier, agr.

  3. Pingback: ADV6 - Reprise de la 7e visualisation de Sara Leo | Johanie Fournier, agr.

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.