Ewen Gallic
Université de Rennes 1, 2014 - 2015
graphics
,lattice
,rgl
,ggplot2
;ggplot2
.ggplot2
sont créés par couches ("layers") ;ggplot2
(et de l'installer lors de la première utilisation) :install.packages("ggplot2")
library(ggplot2)
ggplot2
sont :
data
),mapping
),geom
),stats
),scale
),coord
),facet
).ggplot2
commence par l'appel de la fonction ggplot()
;+
) une couche indiquant la géométrie.ggplot(data, aes(x, y)) + layers
data.frame
.ggplot()
load(url("http://editerna.free.fr/films.rda")
pays_liste <- c("United States of America", "New Zealand",
"United Kingdom", "Spain")
films_reduit <- films[which(films$country %in% pays_liste),]
ggplot(data = films, aes(x = estimated_budget, y = gross_revenue)) + geom_point()
ggplot2
dans une variable :p <- ggplot(data = films, aes(x = estimated_budget, y = gross_revenue)) + geom_point()
print(p)
colour
: la couleur,shape
: la forme,size
: la taille,alpha
: la transparence,fill
: le remplissage ;ggplot(data = films, aes(x = estimated_budget, y = gross_revenue)) +
geom_point(colour = "dodger blue", alpha = .8, aes(size = runtime))
data.frame
, une distinction est faite en fonction du mode de cette variable ;ggplot() + geom_point(data = films,
aes(x = estimated_budget, y = gross_revenue, col = runtime))
ggplot() + geom_point(data = films,
aes(x = estimated_budget, y = gross_revenue, col = country))
geom_point()
: tracer des points ;geom_line()
: tracer des lignes ;geom_polygon()
: tracer des lignes ;geom_path()
: tracer des points dans l’ordre du data frame ;geom_step()
: faire un graphique en escalier ;geom_boxplot()
: tracer une boîte à moustache ;geom_jitter()
: mettre des points côte à côte pour une variable catégorielle ;geom_smooth()
: ajouter une courbe de tendance ;geom_histogram()
: tracer un histogramme ;geom_bar()
: tracer un diagramme en bâton ;geom_density()
: tracer une estimation de densité.geom_*
possèdent des paramètres optionnels (voici les principaux) :
data
: données brutes à représenter,mapping
: projection graphique à employer,stat
: transformation statistique,position
: des positions pour éviter le chevauchement ;ggplot()
.geom_point()
permet de faire des nuages de points.ggplot(data = films,
aes(x = estimated_budget, y = gross_revenue, col = country)) +
geom_point()
ggplot()
;geom_point()
;data =
!ggplot() +
geom_point(data = films,
aes(x = estimated_budget, y = gross_revenue, col = country))
colour
soit fourni à geom_point()
et non pas à ggplot()
!ggplot(data = films,
aes(x = estimated_budget, y = gross_revenue)) +
geom_point(colour = "red")
geom_line()
;ggplot(data = films,
aes(x = estimated_budget, y = gross_revenue, col = country)) +
geom_line()
colour
qui dépend d'une variable facteur du data.frame
créé automatiquement des groupes ;group
:ggplot(data = films,
aes(x = estimated_budget, y = gross_revenue, group = country)) +
geom_line()
geom_polygon()
;ggplot2
.df <- data.frame(x = c(0, 0.2, 1, 0.75), y = c(0, 1, 1, 0.5))
ggplot() + geom_polygon(data = df, aes(x = x, y = y), fill = "light green")
geom_boxplot()
ggplot(data = films_reduit, aes(x = country, y = runtime, fill = country)) +
geom_boxplot()
x
:ggplot(data = films_reduit, aes(x = factor(1), y = runtime)) + geom_boxplot()
ggplot(data = films_reduit, aes(x = country, y = estimated_budget, col = country)) +
geom_point()
geom_jitter()
ggplot(data = films_reduit, aes(x = country, y = estimated_budget, col = country)) +
geom_jitter()
geom_smooth()
:ggplot(data = films, aes(x = estimated_budget, y = gross_revenue)) +
geom_point() + geom_smooth()
geom_*()
!ggplot() + layer_1 + layer_2 + ...
geom_smooth()
est method
;lm
, glm
, gam
, loess
, rlm
) ;loess
est utilisé, sinon, gam
est employé ;formula
;se=FALSE
) ;level
;stat_smooth()
pour plus de détails.Par exemple, avec un lissage par régression linéaire, avec des intervalles de confiance de prévision à 90% :
ggplot(data = films, aes(x = estimated_budget, y = gross_revenue)) +
geom_point() + stat_smooth(method = "lm", level = 0.9)
geom_histogram()
;binwidth
;ggplot(data = films_reduit,
aes(x = (estimated_budget/1000000)/runtime,
fill = country)) +
geom_histogram(binwidth = 0.1, colour = "dark grey")
geom_density()
;kernel
;?stat_density
fournit plus de détails.ggplot(data = films_reduit,
aes(x = (estimated_budget/1000000)/runtime,
fill = country)) +
geom_density(colour = "black", alpha = .5)
À partir du jeu de données diamonds
:
data.frame
diamonds_s
, un échantillon de diamonds
de taille \(n = 1000\)price
) en fonction de la masse (carat
), afficher les points en rouge ;cut
) ;carat
), avec une fenêtre de 0.05 ;carat
) pour chaque coupe (cut
).geom_*()
s'appuient, pour certaines, sur des fonctions stat_*()
;geom_histogram()
s'appuie sur stat_bin()
;stat_bin()
créé et retourne (entre autres) :
count
, qui indique le nombre d'observations pour chaque intervalle,density
, qui donne une estimation de la densité de points dans chaque classe (avec mise à l'échelle pour que l'intégrale vaille 1 sur le support).ggplot(data = films_reduit, aes(x = runtime)) + geom_histogram()
density
retournée par stat_bin()
, en entourant son nom de "..
" :ggplot(data = films_reduit, aes(x = runtime)) + geom_histogram(aes(y = ..density..))
stat_bin()
;stat_density()
:p <- ggplot(data = films_reduit, aes(x = runtime))
p + geom_histogram() + geom_line(stat="density", col = "red", size = 1.2)
stat_bin()
et stat_density()
!y
:
y = ..density..
;y
sera donc la densité plutôt que le comptage.p <- ggplot(data = films_reduit, aes(x = runtime, y = ..density..))
p + geom_histogram(colour = "white") +
geom_line(stat="density", col = "red", size = 1.2)
Fonction | Description |
---|---|
stat_bin() |
répartition des données en classes |
stat_contour() |
calculer les contours des données en 3d |
stat_density() |
estimation de densité 1d par la méthode du noyau |
stat_density2d() |
estimation de densité 2d |
stat_identity() |
ne transforme pas les données |
stat_qq() |
qqplot (droite de Henry) |
stat_quantile() |
quantiles continus |
stat_smooth() |
lissage |
stat_sum() |
somme les valeurs uniques |
stat_summary() |
appliquer une fonction pour faire des summaries sur les valeurs de y |
stat_unique() |
retire les valeurs dupliquées |
stat_*()
peuvent être :
stat
d'une fonction geom_*()
, en fournissant le suffixe.ggplot(data = films_reduit, aes(x = runtime, y = ..density..)) +
geom_line(stat="density", col = "red", size = 1.2)
carat
dans le data.frame
diamonds
) ;scale_*()
permettent de définir et contrôler le mapping entre les données et les attributs esthétiques ;scale_*()
;Le lien est donc fait entre :
scale_*()
;scale_
,scale_colour_gradient()
p <- ggplot(data = films_reduit, aes(x = estimated_budget,
y = gross_revenue, colour = runtime)) +
geom_point()
p
p + scale_colour_gradient(name = "Runtime", low = "#FF0000", high ="#FFFF00")
Esthétique | Variable discrète | Variable continue |
---|---|---|
Transparence (alpha) | scale_alpha_discrete() |
scale_alpha_continuous() |
scale_alpha_manual() |
||
scale_alpha_identity() |
scale_alpha_identity() |
|
Couleur (colour) | scale_colour_discrete() |
scale_colour_continuous() |
scale_colour_brewer() |
scale_colour_dilstiller() |
|
scale_colour_grey() |
scale_colour_gradient() |
|
scale_colour_hue() |
scale_colour_gradient2() |
|
scale_colour_manual() |
scale_colour_gradientn() |
|
scale_colour_identity() |
scale_colour_identity() |
Esthétique | Variable discrète | Variable continue |
---|---|---|
Remplissage (fill) | scale_fill_discrete() |
scale_fill_continuous() |
scale_fill_brewer() |
scale_fill_distiller() |
|
scale_fill_grey() |
scale_fill_gradient() |
|
scale_fill_hue() |
scale_fill_gradient2() |
|
scale_fill_manual() |
scale_fill_gradientn() |
|
scale_fill_identity() |
scale_fill_identity() |
|
Type de ligne (linetype) | scale_linetype_discrete() |
scale_linetype_continuous() |
scale_linetype_manual() |
||
scale_linetype_identity() |
scale_linetype_identity() |
|
Forme | scale_shape_discrete() |
scale_shape_continuous() |
scale_shape_manual() |
||
scale_shape_identity() |
scale_shape_identity() |
Esthétique | Variable discrète | Variable continue |
---|---|---|
Taille (size) | scale_size_discrete() |
scale_size_continuous() |
scale_size_manual() |
scale_size_area() |
|
scale_size_identity() |
scale_size_identity() |
|
Position (x, y) | scale_x_discrete() |
scale_x_continuous() |
scale_y_discrete() |
scale_y_continuous() |
|
scale_x_date() |
||
scale_y_date() |
||
scale_x_datetime() |
||
scale_y_datetime() |
||
scale_x_log10() |
||
scale_y_log10() |
||
scale_x_reverse() |
||
scale_y_reverse() |
||
scale_x_sqrt() |
||
scale_y_sqrt() |
p <- ggplot(data = films_reduit, aes(x = estimated_budget,
y = gross_revenue,
colour = country,
size = runtime)) +
geom_point()
p
p + scale_colour_grey(name = "Country", start = .1, end = .8,
na.value = "orange")
order()
) levels(factor(films_reduit$country))
## [1] "New Zealand" "Spain"
## [3] "United Kingdom" "United States of America"
p + scale_colour_manual(name = "Country",
values = c("red", "green", "blue", "orange"),
labels = c("NZ", "ES", "UK", "USA"))
(p <- p + scale_colour_manual(name = "Country",
values = c("Spain" = "green", "New Zealand" = "red",
"United States of America" = "orange",
"United Kingdom" = "blue"),
labels = c("Spain" = "ES", "New Zealand" = "NZ",
"United States of America" = "USA",
"United Kingdom" = "UK")))
range(films_reduit$runtime)
## [1] 66 375
p + scale_size_continuous(name = "Film\nDuration",
breaks = c(0, 60, 90, 120, 150, 300, Inf),
range = c(1,10))
films_reduit$initial_release_date2 <- as.Date(films_reduit$initial_release_date)
(p_2 <- ggplot(data = films_reduit,
aes(x = initial_release_date2, y = runtime)) +
geom_point())
## Warning: Removed 3 rows containing missing values (geom_point).
scale_x_date()
est pratique pour gérer les affichages des étiquettes des marques.library(scales)
p_2 + scale_x_date(breaks = date_breaks("10 year"), labels = date_format("%Y"))
ggplot2
essaie de combiner les légendes autant que possible ;(p <- ggplot(data = films_reduit, aes(x = estimated_budget, y = gross_revenue,
colour = country_abr, size = country_abr)) +
geom_point())
p + scale_colour_discrete(name = "Country")
p + scale_colour_discrete(name = "Country") +
scale_size_discrete(name = "Country")
carat
) en fonction du prix associé (price
) ;cut
) ;ggplot2
effectue des regroupements automatiquement dans de nombreux cas ;group
.library(reshape2)
df <- data.frame(year = rep(1949:1960, each = 12), month = rep(1:12, 12),
passengers = c(AirPassengers))
head(df)
## year month passengers
## 1 1949 1 112
## 2 1949 2 118
## 3 1949 3 132
## 4 1949 4 129
## 5 1949 5 121
## 6 1949 6 135
ggplot(data = df, aes(x = month, y = passengers)) + geom_line()
En précisant que l'on souhaite regrouper par années
ggplot(data = df, aes(x = month, y = passengers, group = year)) +
geom_line()
p <- ggplot(data = films_reduit,
aes(x = estimated_budget, y = gross_revenue)) +
geom_point()
p
geom_text()
ou annotate()
;annotate()
;annotate()
ne sont pas héritées ;geom
doit prendre la valeur "texte"
;x
et y
indiquent la (les) position(s) (x,y) du centre du texte ;legend
doit recevoir un vecteur de caractères ;colour
permet de changer la couleur, noire par défaut.p + annotate("text", x = 1e8, y = 2e9, label = "Du texte")
p + annotate("text", x = c(1e8, 2e8), y = 2e9,
label = c("Du texte", "Un autre texte"),
colour = c("red", "blue"))
parse = TRUE
:
[texte]
,^texte
,p + annotate("text", x = 1e8, y = 2e9,
label = "sqrt(1-alpha) + beta[i+1]^n", parse = TRUE)
geom_line()
et geom_path()
:
geom_vline()
: ligne verticale ;geom_hline()
: ligne horizontale ;geom_abline()
: ligne spécifiée par sa pente et son ordonnée à l’origine ;geom_segment()
: segment (ou flèche en utilisant arrow()
).p + geom_vline(xintercept = seq(0, 3e8, by = 1e8),
size = 1, col = "dodger blue")
p + geom_hline(yintercept = seq(0, 2e9, by = 1e9),
col = "gold", linetype = "longdash")
p + geom_abline(intercept = 1e9, slope = -5)
p + geom_segment(aes(x = 0, xend = 1e8, y = 0, yend = 1e9), col = "blue")
annotate()
:p + annotate(geom = "segment", x = 0, xend = 1e8,
y = 0, yend = 1e9, col = "blue")
arrow()
(package grid
) :library(grid)
p + annotate(geom = "segment", x = 0, xend = 1e8,
y = 0, yend = 1e9, col = "blue",
arrow = arrow(length = unit(0.5, "cm")))
geom_rect()
ou annotate()
:p + annotate(geom = "rect", xmin = 1e8, xmax = 2e8, ymin = -Inf, ymax = Inf,
alpha = .3, fill = "red") +
annotate(geom ="rect", xmin = 0, xmax = 5e8, ymin = 1e9, ymax = 2e9,
alpha = .2, fill = "dodger blue")
À partir du graphique suivant :
p <- ggplot() + geom_point(data = diamonds[sample(1:nrow(diamonds), 1000),],
aes(x = carat, y = price, colour = cut))
Fonction | Description |
---|---|
position_dodge |
évite les chevauchements, place les éléments côte à côte |
position_fill |
empile les éléments qui se chevauchent, en normalisant pour avoir une hauteur égale |
position_identity |
n’ajuste pas la position |
position_jitter |
place les éméments côte à côte en essyant d’optimiser l’espace |
position_stack |
empile les éléments qui se chevauchent |
position
des fonctions geom_*()
, en conservant uniquement le suffixe.p <- ggplot(data = films_reduit, aes(x = runtime, fill = country_abr))
p + geom_bar(position = "dodge")
p + geom_bar(position = "fill")
p + geom_bar(position = "identity")
p + geom_bar(position = "jitter")
p + geom_bar(position = "stack")
data.frame
;facet_grid()
: grille 2d, variables définissant lignes et colonnes,facet_wrap()
: graphiques pour chaque sous-division, mis bout-à-bout dans une matrice 2x2.films_reduit$old <- ifelse(films_reduit$year <= 2000, "ancien", "nouveau")
facet_grid()
facets
:Valeur | Effet |
---|---|
. ~ . (par défaut) |
pas de faceting |
. ~ variable_colonne |
une ligne, autant de colonnes que de valeurs pour variable_colonne |
variable_ligne ~ . |
autant de lignes que de valeurs possibles pour variable_ligne |
variable_ligne ~ variable_colonne |
autant de lignes que de valeurs possibles pour variable_ligne , autant de colonnes que de valeurs possibles pour variable_colonne |
facet_grid()
p <- ggplot(data = films_reduit, aes(x = estimated_budget,
y = gross_revenue,
colour = country,
size = runtime)) +
geom_point()
facet_grid()
p + facet_grid(. ~ country)
facet_grid()
p + facet_grid(old ~ country)
facet_grid()
margins = TRUE
;p + facet_grid(old ~ country, margins = TRUE)
facet_grid()
margins
.p + facet_grid(old ~ country, margins = "country")
facet_wrap()
facets
;~ variable_1 + variable_2 ... + variable_n
;facet_wrap()
p + facet_wrap(facets = ~ country)
facet_wrap()
p + facet_wrap(facets = ~ country + old)
scales
.Valeur | Effet |
---|---|
fixed |
échelles fixes, identiques pour chaque graphique |
free |
échelles libres, pouvant varier en fonction de chaque graphique |
free_x |
seule l'échele pour les x peut varier, l'échelle pour les y est fixe |
free_y |
seule l'échelle pour les y peut varier, l'échelle pour les x est fixe |
p_m <- ggplot(data = films_reduit,
aes(estimated_budget/1000000,
gross_revenue/1000000,
colour = country,
size = runtime)) +
geom_point()
p_m + facet_wrap( ~ country, scales = "fixed")
p_m + facet_wrap( ~ country, scales = "free_y")
ggpplot2
est le système cartésien ;coord_cartesian()
: coordonnées cartésiennes,coord_fixed()
: coordonnées cartésiennes avec la même échelle pour les deux axes,coord_flip()
: coordonnées cartésiennes avec les axes renversés,coord_map()
: projections pour les cartes,coord_polar()
: coordonnées polaires,coord_trans()
: coordonnées cartésiennes transformées.(p <- ggplot(data = films,
aes(x = estimated_budget/1e6, y = gross_revenue/1e6)) +
geom_point())
p + coord_flip()
p + coord_trans(x = "log10", y = "log10")
scale_x_log10()
;p + scale_x_log10()
ggtitle()
:ggplot(data = films,
aes(x = estimated_budget/1e6, y = gross_revenue/1e6)) +
geom_point() + ggtitle("Titre")
xlab()
et ylab()
:ggplot(data = films,
aes(x = estimated_budget/1e6, y = gross_revenue/1e6)) +
geom_point() + ggtitle("Titre") +
xlab("Étiquette axe des x") + ylab("Étiquette axe des y")
xlim()
et ylim()
;coord_cartesian()
,xlim
et ylim
.df <- data.frame(x = c(0, 0, 5, 5, 0, 0, 10, 10),
y = c(0,5, 5, 0, 10, 15, 15, 10),
g = factor(rep(1:2, each = 4)))
(p_2 <- ggplot(data = df, aes(x = x, y = y, group = g, fill = g)) +
geom_polygon())
p_2 + xlim(0, 7)
p_2 + coord_cartesian(xlim = c(0,7))
À partir du graphique suivant :
p <- ggplot() + geom_point(data = diamonds[sample(1:nrow(diamonds), 1000),],
aes(x = carat, y = price, colour = cut))
theme()
;element_text()
: pour toutes les étiquettes, ce qui est au format texte,element_line()
: pour toutes les lignes tracées,element_rect()
: pour les backgrounds et les cadres,element_blank()
permet de ne rien dessiner.element_text()
Paramètre | Valeur |
---|---|
family |
la famille de la fonte |
face |
graisse ("plain", "italic", "bold", "bold.italic") |
colour |
couleur |
size |
taille en pts |
hjust |
justification horizontale, dans [0, 1] |
vjust |
justification verticale, dans [0, 1] |
angle |
angle, dans [0, 360] |
lineheight |
hauteur de ligne (pour l’espacement entre les lignes) |
element_line()
Paramètre | Valeur |
---|---|
colour |
la couleur de ligne |
size |
la taille |
linetype |
le type de ligne ("blank", "solid", "dashed", "dotted", "dotdash", |
"longdash", "twodash) | |
lineend |
le type de fin de ligne ("round", "butt" ou "square") |
element_rect()
Paramètre | Valeur |
---|---|
fill |
la couleur de remplissage |
colour |
la couleur de la bordure |
size |
la taille de la bordure |
linetype |
le type de ligne ("blank", "solid", "dashed", "dotted", "dotdash", "longdash", "twodash) |
library(grid)
p <- ggplot(data = films_reduit,
aes(x = estimated_budget/1e6, y = gross_revenue/1e6, colour = country_abr)) +
# Tracer des points
geom_point() +
# Ajout d'un titre
ggtitle("Titre\nsur deux lignes") +
# Changement des étiquettes pour les axes
xlab("Étiquette axe des x") +
ylab("Étiquette axe des y") +
# Changement du titre de la légende
scale_colour_discrete(name = "Country")
p
p_2 <- p + theme(plot.title = element_text(family = "Times",
face = "bold", colour = "red",
size = rel(2), hjust = 0,
lineheight = 1.5),
axis.title = element_text(face = "bold", colour = "orange"),
axis.text.x = element_text(colour = "blue", angle = 45),
axis.ticks = element_line(colour = "brown", size = rel(2)),
legend.key = element_rect(fill = "dodger blue", colour = "red"),
legend.background = element_rect(fill = "green",
colour = "purple",
linetype = "twodash"),
panel.grid.minor = element_blank(),
panel.grid.major = element_line(colour = "black") )
p_2
theme_grey()
(thème par défaut),theme_bw()
,theme_linedraw()
,theme_light()
,theme_minimal()
,theme_classic()
.p + theme_bw()
À partir du graphique suivant :
p <- ggplot() + geom_point(data = diamonds[sample(1:nrow(diamonds), 1000),],
aes(x = carat, y = price, colour = cut))
ggplot()
: ggsave()
.Paramètre | Valeur |
---|---|
filename |
nom du fichier, ou chemin et nom du fichier |
plot |
graphique à sauvegarder (par défaut, le dernier graphique, en faisant appel à la fonction last_plot()) |
device |
dispositif à utiliser (automatiquement extrait de l’extension du fichier indiqué au paramètre filename) |
path |
chemin vers le fichier |
scale |
facteur d’échelle |
width |
largeur (par défaut, celle de la fenêtre de graphique actuelle) |
height |
hauteur (par défaut, celle de la fenêtre de graphique actuelle) |
units |
unité pour la largeur et la longueur ("in", "cm" ou "mm") |
dpi |
nombre de points par pouce, uniquement pour les images matricielles |
limitsize |
quand TRUE (la valeur par défaut), l’image sauvegardée ne dépassera pas les 50 × 50 in |
ggsave()
reconnaît automatiquement les extensions suivantes :
p <- ggplot(data = films_reduit,
aes(x = estimated_budget, y = gross_revenue,
colour = country)) +
geom_point() +
xlab("Estimated budget") + ylab("Gross Revenue") +
scale_colour_discrete(name = "Country") +
ggtitle("A small sample of movies")
p
ggsave("estim_bud.pdf")
ggsave(p, file = "estim_bud.pdf", width = 15, height = 8, unit = "cm", scale = 2)
ggplot2
R
, il est nécessaire d'avoir les données à disposition ;R
,rworldmap
rworldmap
propose une carte du monde ;getMap()
;ggplot()
:
fortify()
pour transformer le SpatialPolygonsDataFrame
en data.frame
.library(ggplot2)
library(rworldmap)
rworldmap
# Carte du monde
worldMap <- getMap()
# Format lisible pour ggplot()
world_df <- fortify(worldMap)
## Regions defined for each Polygons
head(world_df)
## long lat order hole piece group id
## 1 61.21082 35.65007 1 FALSE 1 Afghanistan.1 Afghanistan
## 2 62.23065 35.27066 2 FALSE 1 Afghanistan.1 Afghanistan
## 3 62.98466 35.40404 3 FALSE 1 Afghanistan.1 Afghanistan
## 4 63.19354 35.85717 4 FALSE 1 Afghanistan.1 Afghanistan
## 5 63.98290 36.00796 5 FALSE 1 Afghanistan.1 Afghanistan
## 6 64.54648 36.31207 6 FALSE 1 Afghanistan.1 Afghanistan
rworldmap
group
, pour bien définir chaque polygone ;coord_equal()
permet de s'assurer de respecter un ratio de 1 entre les unités de x
et y
.worldmap <- ggplot() +
geom_polygon(data = world_df, aes(x = long, y = lat, group = group)) +
scale_y_continuous(breaks = (-2:2) * 30) +
scale_x_continuous(breaks = (-4:4) * 45) +
coord_equal()
rworldmap
worldmap
rworldmap
cord_map()
permet de changer le système de coordonnées ;(worldmap <- ggplot() +
geom_polygon(data = world_df, aes(x = long, y = lat, group = group)) +
scale_y_continuous(breaks = (-2:2) * 30) +
scale_x_continuous(breaks = (-4:4) * 45) +
coord_map("ortho", orientation=c(61, 90, 0)))
maps
rworldmap
, on obtient des frontières de pays ;maps
;map_data()
(package ggplot2
) s'appuie sur la fonction map
du package du même nom ;data.frame
, prêt à l'emploi par ggplot()
!maps
map_data()
le nom d'un pays (qui correspond au nom d'une carte) :Nom | Description |
---|---|
county |
carte des counties américains |
france |
carte de la France |
italy |
carte de l’Italie |
nz |
carte de la Nouvelle-Zélande |
state |
carte des États-Unis avec chaque état |
usa |
carte des États-Unis avec uniquement les frontières |
world |
carte du monde |
world2 |
carte du monde centrée sur le Pacifique |
maps
region
.map_fr <- map_data("france")
# Le nom des régions
head(unique(map_fr$region))
## [1] "Nord" "Pas-de-Calais" "Somme" "Ardennes"
## [5] "Seine-Maritime" "Aisne"
head(map_fr, 3)
## long lat group order region subregion
## 1 2.557093 51.09752 1 1 Nord <NA>
## 2 2.579995 51.00298 1 2 Nord <NA>
## 3 2.609101 50.98545 1 3 Nord <NA>
maps
(p_map_fr <- ggplot(data = map_fr,
aes(x = long, y = lat, group = group, fill = region)) +
geom_polygon() + coord_equal() + scale_fill_discrete(guide = "none"))
maps
ind_bzh <- grep("armor|finis|vilaine|morb",
unique(map_fr$region), ignore.case = TRUE)
(dep_bzh <- unique(map_fr$region)[ind_bzh])
## [1] "Cotes-Darmor" "Finistere" "Ille-et-Vilaine" "Morbihan"
map_fr_bzh <- map_data("france", region = dep_bzh)
maps
(p_map_fr_bzh <- ggplot(data = map_fr_bzh,
aes(x = long, y = lat, group = group, fill = region)) +
geom_polygon() + coord_equal() + scale_fill_discrete(name = "Département"))
shp
(shapefile) ;shp
: http://www.data.rennes-metropole.fr/ ;readOGR()
, du package rgdal
.library("rgdal")
library("maptools")
library("ggplot2")
library("plyr")
# Importer les polygones
rennes <- readOGR(dsn="./quartiers_shp_lamb93", layer="quartiers")
# Étape pour changer la projection de la carte
rennes <- spTransform(rennes, CRS("+proj=longlat +ellps=GRS80"))
# Pour permettre la jointure des objets géométriques
rennes@data$id <- rownames(rennes@data)
# Transformer en data frame pour fournir à ggplot()
rennes_points <- fortify(rennes, region="id")
# Permet d'éviter des trous éventuels
rennes_df <- join(rennes_points, rennes@data, by="id")
(p_map_rennes <- ggplot(data = rennes_df,
aes(x = long, y = lat, group = group)) +
geom_polygon() +
coord_equal())
data.frame
, avec la valeur de la statistique, pour chaque ligne.tx_chomage_2014_T1 <- data.frame(
region = c("Cotes-Darmor","Finistere",
"Ille-et-Vilaine", "Morbihan"),
tx_chomage_2014_T1 = c(8.8, 8.8,7.9, 9.1))
# Ajout des valeurs pour chaque région
ind_match <- match(map_fr_bzh$region, tx_chomage_2014_T1$region)
map_fr_bzh$tx_chomage_2014_T1 <- tx_chomage_2014_T1[ind_match,
"tx_chomage_2014_T1"]
map_fr_bzh$tx_chomage_2014_T1
à l'esthétique de remplissage.(p_map_fr_bzh <- ggplot(data = map_fr_bzh,
aes(x = long, y = lat, group = group,
fill = tx_chomage_2014_T1)) +
geom_polygon() + coord_equal() +
scale_fill_gradient(name = "Département", low ="#FFFF00", high = "#FF0000"))
# Fonction pour trouver le point central du polygone
mid_range <- function(x) mean(range(x, na.rm = TRUE))
centres <- ddply(map_fr_bzh, .(region), colwise(mid_range, .(lat, long)))
# Rajout des taux de chômage
ind_match <- match(centres$region, tx_chomage_2014_T1$region)
centres$tx_chomage_2014_T1 <- tx_chomage_2014_T1$tx_chomage_2014_T1[ind_match]
label_chomage <- paste0(centres$tx_chomage_2014_T1, "%")
p_map_fr_bzh + annotate("text", x = centres$long,
y = centres$lat, label = label_chomage)
ggplot2
ggplot2
:ggplot2
;library(MASS)
set.seed(1)
# Normale bivariée
Sigma <- matrix(c(10,3,3,2),2,2)
biv_n <- mvrnorm(n=1000, rep(0, 2), Sigma)
# Estimation de la densité par la méthode du noyau
biv_n_kde <- kde2d(biv_n[,1], biv_n[,2], n = 50)
persp(biv_n_kde, theta = 10, phi = 15, xlab = "X")
plot3D()
du package rgl
.library(rgl)
set.seed(1)
n <- 10000
x <- rnorm(n, mean = 38)
y <- rnorm(n, mean = 42)
biv_kde <- kde2d(x, y, n = 50)
den_z <- biv_kde$z
surface3d(biv_kde$x,biv_kde$y,den_z*20,color="#FF2222",alpha=0.5)