Structure
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)
ggplot2R, il est nécessaire d'avoir les données à disposition ;R,rworldmaprworldmap 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
rworldmapgroup, 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()
rworldmapworldmap

rworldmapcord_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)))

mapsrworldmap, 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() !mapsmap_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 |
mapsregion.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"))

mapsind_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)

ggplot2ggplot2 :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)