R Language
ggplot2
Recherche…
Remarques
ggplot2
a son propre site de référence parfait http://ggplot2.tidyverse.org/ .
La plupart du temps, il est plus commode d'adapter la structure ou le contenu des données tracées (par exemple, un data.frame
) que d'ajuster les choses par la suite.
Rstudio publie un « Visualisation de données avec ggplot2 » très utile antisèche qui se trouve ici .
Scatter Plots
Nous traçons un simple diagramme de dispersion en utilisant le jeu de données d’iris intégré comme suit:
library(ggplot2)
ggplot(iris, aes(x = Petal.Width, y = Petal.Length, color = Species)) +
geom_point()
Affichage de plusieurs parcelles
Afficher plusieurs tracés dans une image avec les différentes fonctions de facet
. Un avantage de cette méthode est que tous les axes partagent la même échelle entre les graphiques, ce qui permet de les comparer facilement en un coup d’œil. Nous utiliserons le jeu de données mpg
inclus dans ggplot2
.
Enroulez les graphiques ligne par ligne (tente de créer une disposition carrée):
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_wrap(~class)
Afficher plusieurs graphiques sur une ligne, plusieurs colonnes:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(.~class)
Afficher plusieurs graphiques sur une colonne, plusieurs lignes:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(class~.)
Afficher plusieurs graphiques dans une grille par 2 variables:
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
facet_grid(trans~class) #"row" parameter, then "column" parameter
Préparez vos données pour le traçage
ggplot2
fonctionne mieux avec une longue trame de données. Les exemples de données suivants représentent les prix des bonbons sur 20 jours différents, dans un format décrit comme large, car chaque catégorie comporte une colonne.
set.seed(47)
sweetsWide <- data.frame(date = 1:20,
chocolate = runif(20, min = 2, max = 4),
iceCream = runif(20, min = 0.5, max = 1),
candy = runif(20, min = 1, max = 3))
head(sweetsWide)
## date chocolate iceCream candy
## 1 1 3.953924 0.5890727 1.117311
## 2 2 2.747832 0.7783982 1.740851
## 3 3 3.523004 0.7578975 2.196754
## 4 4 3.644983 0.5667152 2.875028
## 5 5 3.147089 0.8446417 1.733543
## 6 6 3.382825 0.6900125 1.405674
Pour convertir sweetsWide
au format long à utiliser avec ggplot2
, vous ggplot2
utiliser plusieurs fonctions utiles de la base R et des packages reshape2
, data.table
et tidyr
(dans l'ordre chronologique):
# reshape from base R
sweetsLong <- reshape(sweetsWide, idvar = 'date', direction = 'long',
varying = list(2:4), new.row.names = NULL, times = names(sweetsWide)[-1])
# melt from 'reshape2'
library(reshape2)
sweetsLong <- melt(sweetsWide, id.vars = 'date')
# melt from 'data.table'
# which is an optimized & extended version of 'melt' from 'reshape2'
library(data.table)
sweetsLong <- melt(setDT(sweetsWide), id.vars = 'date')
# gather from 'tidyr'
library(tidyr)
sweetsLong <- gather(sweetsWide, sweet, price, chocolate:candy)
Le tout donne un résultat similaire:
head(sweetsLong)
## date sweet price
## 1 1 chocolate 3.953924
## 2 2 chocolate 2.747832
## 3 3 chocolate 3.523004
## 4 4 chocolate 3.644983
## 5 5 chocolate 3.147089
## 6 6 chocolate 3.382825
Reportez-vous également à la section Remodelage des données entre les formulaires longs et les formulaires longs pour obtenir des détails sur la conversion des données entre le format long et le format large .
Les sweetsLong
qui en sweetsLong
ont une colonne de prix et une colonne décrivant le type de bonbon. Le traçage est maintenant beaucoup plus simple:
library(ggplot2)
ggplot(sweetsLong, aes(x = date, y = price, colour = sweet)) + geom_line()
Ajouter des lignes horizontales et verticales pour tracer
Ajouter une ligne horizontale commune pour toutes les variables catégorielles
# sample data
df <- data.frame(x=('A', 'B'), y = c(3, 4))
p1 <- ggplot(df, aes(x=x, y=y))
+ geom_bar(position = "dodge", stat = 'identity')
+ theme_bw()
p1 + geom_hline(aes(yintercept=5), colour="#990000", linetype="dashed")
Ajouter une ligne horizontale pour chaque variable catégorielle
# sample data
df <- data.frame(x=('A', 'B'), y = c(3, 4))
# add horizontal levels for drawing lines
df$hval <- df$y + 2
p1 <- ggplot(df, aes(x=x, y=y))
+ geom_bar(position = "dodge", stat = 'identity')
+ theme_bw()
p1 + geom_errorbar(aes(y=hval, ymax=hval, ymin=hval), colour="#990000", width=0.75)
Ajouter une ligne horizontale sur des barres groupées
# sample data
df <- data.frame(x = rep(c('A', 'B'), times=2),
group = rep(c('G1', 'G2'), each=2),
y = c(3, 4, 5, 6),
hval = c(5, 6, 7, 8))
p1 <- ggplot(df, aes(x=x, y=y, fill=group))
+ geom_bar(position="dodge", stat="identity")
p1 + geom_errorbar(aes(y=hval, ymax=hval, ymin=hval),
colour="#990000",
position = "dodge",
linetype = "dashed")
Ajouter une ligne verticale
# sample data
df <- data.frame(group=rep(c('A', 'B'), each=20),
x = rnorm(40, 5, 2),
y = rnorm(40, 10, 2))
p1 <- ggplot(df, aes(x=x, y=y, colour=group)) + geom_point()
p1 + geom_vline(aes(xintercept=5), color="#990000", linetype="dashed")
Diagramme à barres vertical et horizontal
ggplot(data = diamonds, aes(x = cut, fill =color)) +
geom_bar(stat = "count", position = "dodge")
il est possible d'obtenir un graphique à barres horizontales en ajoutant simplement esthétique coord_flip () à l'objet ggplot:
ggplot(data = diamonds, aes(x = cut, fill =color)) +
geom_bar(stat = "count", position = "dodge")+
coord_flip()
Complot de violon
Les tracés de violon sont des estimations de densité de noyau reflétées dans le plan vertical. Ils peuvent être utilisés pour visualiser plusieurs distributions côte à côte, la mise en miroir aidant à mettre en évidence les différences.
ggplot(diamonds, aes(cut, price)) +
geom_violin()
Les tracés de violon sont nommés pour leur ressemblance avec l'instrument de musique, ce qui est particulièrement visible lorsqu'ils sont couplés à une boîte à moustaches superposée. Cette visualisation décrit ensuite les distributions sous-jacentes à la fois en termes de résumé de 5 nombres de Tukey (sous forme de boîtes à moustaches) et d'estimations de densité continue complète (violons).
ggplot(diamonds, aes(cut, price)) +
geom_violin() +
geom_boxplot(width = .1, fill = "black", outlier.shape = NA) +
stat_summary(fun.y = "median", geom = "point", col = "white")
Produire des parcelles de base avec qplot
qplot est conçu pour être similaire à la fonction base r plot()
, en essayant de toujours tracer vos données sans exiger trop de spécifications.
qplot de base
qplot(x = disp, y = mpg, data = mtcars)
ajouter des couleurs
qplot(x = disp, y = mpg, colour = cyl,data = mtcars)
ajouter un plus lisse
qplot(x = disp, y = mpg, geom = c("point", "smooth"), data = mtcars)