plot classiqueggplot2plot classiqueTous les graphiques crées dans R sont affichés dans des fenêtres spéciales, distinctes de la console, appelées R graphics : Device numero-device, ou numero-device est un entier donnant le numéro de la fenêtre (ou device).
windows() ou win.graph() sont deux commandes qui permettent d’ouvrir une fenêtre graphique. Cette commande a plusieurs arguments
Pour fermer une fenêtre graphique on utilise la commande la commande dev.off(numéro de la fenêtre).
On peut aussi sauvegarder un graphique dans un fichier extérieur dans des formats différentes:
> savePlot(filename="Rplot",type=c("wmf", "png", "jpeg", "jpg", "bmp","ps", "pdf"),device=dev.cur())Les arguments de la fonction savePlot
filename est le nom du fichier sous lequel enregistrer le graphique,device est le nurnero de device ou se trouve le graphique que l’on veut enregistrer (par défaut, la fenêtre active).Exemple :
> hist(runif(100))
> savePlot(filename="mongraph.png",type="png")layout> mat <- matrix(c(2,3,0,1,0,0,0,4,0,0,0,5),4,3,byrow=TRUE)
> mat> mat <- matrix(c(2,3,0,1,0,0,0,4,0,0,0,5),4,3,byrow=TRUE)
> layout(mat)
> hist(runif(100))
> hist(runif(100))
> hist(runif(100))
> hist(runif(100))
> hist(runif(100))null device
1
> mat <- matrix(c(2,3,0,1,0,0,0,4,0,0,0,5),4,3,byrow=TRUE)
> layout(mat,,widths=c(1,5,14),heights=c(1,2,4,1))
> hist(runif(100))
> hist(runif(100))
> hist(runif(100))
> hist(runif(100))
> hist(runif(100))plotLes arguments de la fonction plot
x Vecteur des coordonnées en x des points à tracer.y Vecteur des coordonnées en y des points à tracer.type Specifie le type de graphique a tracer: “p” pour des points, “l” pour des lignes, “b” pour les deux, “c” pour des lignes coupees au niveau des points, “o” pour des lignes et des points superposes, “h” pour des lignes verticales, “s” pour des marches d’escalier (step) et “n” pour ne rien tracer (mais affiche la feneêtre de trace avec les axes).main Spécifie le titre principal.sub Spécifie le sous-titre.xlab Spécifie le titre de l’axe des x.ylab Spécifie le titre de l’axe des y.xlim Vecteur de longueur 2. Spécifie l’intervalle de valeurs à utiliser pour l’axe des x.ylim Vecteur de longueur 2. Spécifie l’intervalle de valeurs à utiliser pour l’axe des y.Exemples:
plot> plot(1:4,c(2,3,4,1),type="b",main="Titre principal",sub="Sous-titre",xlab="Titre pour les x",ylab="Titre pour les y")> points(1:4,c(4,2,1,3),type="l")segments(), lines() et abline()> plot(0,0,type="n",xlim=c(-1,1),ylim = c(-1,1))> segments(x0=0,y0=0,x1=1,y1=1,col="red")> lines(x=c(1,0),y=c(0,1),col="blue")arrow()> x <- runif(12)
> y <- runif(12)
> i <- order(x)
> i
[1] 3 6 12 10 5 7 8 2 9 1 4 11
> x <- x[i]
> y<-y[i]
> plot (x,y)
> s <- seq(length(x)-1)
> arrows(x[s], y[s], x[s+1], y[s+1], length=0.1)curve> curve(x^3-3*x,from=-2,to=2)boxElle permet d’ajouter une boite autour du graphique courant. Le paramètre lty permet de gérer le type de boite ajoute, le paramètre lty spécifie le type de ligne utilisée pour tracer la boite.
> plot(runif(7), type="h",axes=FALSE)
> box(lty = "1373")colors()> colors()[1:10]
[1] "white" "aliceblue" "antiquewhite" "antiquewhite1"
[5] "antiquewhite2" "antiquewhite3" "antiquewhite4" "aquamarine"
[9] "aquamarine1" "aquamarine2"
> colors()[grep("pink",colors())]
[1] "deeppink" "deeppink1" "deeppink2" "deeppink3" "deeppink4"
[6] "hotpink" "hotpink1" "hotpink2" "hotpink3" "hotpink4"
[11] "lightpink" "lightpink1" "lightpink2" "lightpink3" "lightpink4"
[16] "pink" "pink1" "pink2" "pink3" "pink4" Chaque couleur est en fait codée par sa décomposition en couleurs de base : rouge, vert et bleu.
Chaque composante peut prendre une valeur entre 0 et 255 (0 : absence totale de la couleur; 255 : saturation de la couleur).
Le codage hexadécimal de ces 256 valeurs donne donc lieu à des codes compris entre 00 et FF.
La fonction rgb pour obtenir ce codage à partir de la décomposition en rouge, vert et bleu d’une couleur
> rgb(red=26,green=204,blue=76,maxColorValue = 255)
[1] "#1ACC4C"col2rgb effectue l’opération inverse:> col2rgb("#1ACC4C")
[,1]
red 26
green 204
blue 76rainbow()RColorBrewer> require ("RColorBrewer")
Loading required package: RColorBrewer
> display.brewer.all()image()Cette fonction créée et affiche une grille de rectangles en niveaux de gris au de couleurs. Ces rectangles sont aussi appelées des pixels (picture elements). Elle peut donc être utilisée pour afficher des données 3D au des données spatiales.
Exemple :
> X <- matrix(1:12,nrow=3)
> X
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> couleurs <- c("orange", "orangered", "red", "lightblue", "blue", "white", "lightgrey", "grey",
+ "darkgrey", "yellow", "green", "purple")
> x1=rep(c(0,0.5,1),4)
> y1=rep(c(0,0.3,0.7,1),each=3)
> image(X,col=couleurs)
> text(x1,y1,labels = 1:12,cex=2)image()text()R: soit du texte simple ou même des titres en Latex.> plot(1:10,1:10)
> text(3, 6,"du texte")
> text(4,9,expression(hat(beta)==X^t+x^{t^2}))ggplot2ggplot2 est un autre package de R qui permet de tracer des graphiques. Il est de plus en plus populaire parmi les utilisateurs de R et il offre plusieurs possibilités. Voici quelques exemples.
La documentation est assez abondante sur ce package notamment le livre : ggplot2 Elegant Graphics Data Analysis
On considère les données des deux chercheurs Carmen M. Reinhart et Kenneth S. Rogoff qui sont accessibles sur le web et qui les ont utilisées pour démontrer qu’un niveau élevé de dette publique nuisait à la croissance économique.
On procéder d’abord par Télécharger ces données et dresser un premier tableau statistique.
> library(readr)
> ## On va procéder par télécharger le jeu de données et les placer dans un fichier local
> file <- "debt.csv"
>
> # télécharger le jeu de données s'il n'existe pas
> if(!file.exists(file))
+ download.file("http://www.stat.cmu.edu/~cshalizi/uADA/13/hw/11/debt.csv",
+ file, mode = "wb")
>
> # charger les données dans l'objet 'debt'
> debt <- read_csv(file)Les données contiennent, pour un échantillon de 20 pays occidentaux membres de la zone OCDE,
> # suppression de la première colonne
> debt <- debt[, -1]
> # inspection du jeu de données
> str(debt)
Classes 'tbl_df', 'tbl' and 'data.frame': 1171 obs. of 4 variables:
$ Country: chr "Australia" "Australia" "Australia" "Australia" ...
$ Year : int 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 ...
$ growth : num -3.56 2.46 6.44 6.61 6.92 ...
$ ratio : num 190 177 149 126 110 ...> debt$Decade <- factor(10 * debt$Year%/%10)> head(debt)
# A tibble: 6 x 5
Country Year growth ratio Decade
<chr> <int> <dbl> <dbl> <fctr>
1 Australia 1946 -3.557951 190.41908 1940
2 Australia 1947 2.459475 177.32137 1940
3 Australia 1948 6.437534 148.92981 1940
4 Australia 1949 6.611994 125.82870 1940
5 Australia 1950 6.920201 109.80940 1950
6 Australia 1951 4.272612 87.09448 1950> with(debt, plot(Year, growth))qplot (quick plot) du package ggplot2> library(ggplot2)
> with(debt, qplot(Year, growth))> qplot(Year, growth, data = debt) +
+ facet_wrap(~ Country)> qplot(data = debt, y = growth, x = Year, geom = "line") +
+ facet_wrap(~ Country)> qplot(data = debt, y = ratio, x = Year, geom = c("line", "point")) +
+ facet_wrap(~ Country) +
+ labs(x = NULL,
+ y = "Ratio dette publique / produit intérieur brut (%)\n")ggplot de ggplot2. On va tracer le graphique qui montre la relation entre la croissance du PIB et le ratio “Dette/PIB”.> p <- ggplot(data = debt, aes(y = growth, x = ratio))
> names(p)
[1] "data" "layers" "scales" "mapping" "theme"
[6] "coordinates" "facet" "plot_env" "labels"
> head(p$data)
# A tibble: 6 x 5
Country Year growth ratio Decade
<chr> <int> <dbl> <dbl> <fctr>
1 Australia 1946 -3.557951 190.41908 1940
2 Australia 1947 2.459475 177.32137 1940
3 Australia 1948 6.437534 148.92981 1940
4 Australia 1949 6.611994 125.82870 1940
5 Australia 1950 6.920201 109.80940 1950
6 Australia 1951 4.272612 87.09448 1950
> p$coordinates
<ggproto object: Class CoordCartesian, Coord>
aspect: function
distance: function
expand: TRUE
is_linear: function
labels: function
limits: list
range: function
render_axis_h: function
render_axis_v: function
render_bg: function
render_fg: function
train: function
transform: function
super: <ggproto object: Class CoordCartesian, Coord>
> p> p + geom_point() +
+ facet_grid(. ~ Decade)> summary(debt$ratio)
Min. 1st Qu. Median Mean 3rd Qu. Max.
3.279 22.150 40.400 46.280 61.470 247.500
> p<-p + geom_point() +
+ facet_grid(. ~ Decade) +
+ scale_x_continuous(breaks = seq(0, 200, by = 100))
> p> p + aes(color = ratio < 90)> p + aes(color = ratio < 90) + scale_colour_brewer(palette = "Set1")> ## On change les couleurs et on personalise la légende
> p <- p + aes(color = ratio < 90) +
+ scale_color_brewer("", palette = "Set1",
+ labels = c("ratio > 90", "ratio < 90"))
> ## On ajoute une courbe de régression locale
> p + geom_smooth(method = "loess", se = FALSE,
+ size = 1, color = "black")> ggplot(data = debt, aes(y = growth, x = ratio)) +
+ geom_point(color = "grey50") +
+ geom_vline(xintercept = 90, lty = "dotted") +
+ geom_smooth(method = "loess", size = 1, color = "black", se = FALSE) +
+ scale_x_continuous(breaks = seq(0, 200, by = 100)) +
+ facet_grid(. ~ Decade) +
+ labs(y = "Taux de croissance du produit intérieur brut\n",
+ x = "\nRatio dette publique / produit intérieur brut (%)",
+ title = "Données Reinhart et Rogoff corrigées, 1946-2009\n") +
+ theme_bw() +
+ theme(strip.background = element_rect(fill = "grey90", color = "grey50"),
+ strip.text = element_text(size = rel(1)),
+ panel.grid = element_blank())> ggplot(data = debt, aes(x = ratio > 90, y = growth)) +
+ geom_boxplot() +
+ scale_x_discrete(labels = c("< 90", "90+")) +
+ facet_grid(. ~ Decade) +
+ labs(y = "Taux de croissance du produit intérieur brut\n",
+ x = "\nRatio dette publique / produit intérieur brut (%)",
+ title = "Données Reinhart et Rogoff corrigées, 1946-2009\n") +
+ theme_linedraw() +
+ theme(strip.text = element_text(size = rel(1)),
+ panel.grid = element_blank())ggplot2.> ggsave("reinhart-rogoff.pdf", plot = p,
+ width = 11, height = 8)ggfortifyC’est un package qui contient des fonctions prêtes pour des représentations des résultats statistiques.
autoplot détecte la classe de l’objet à tracer et le trace selon cette classe.> library(ggfortify)
> head(AirPassengers)
[1] 112 118 132 129 121 135
> class(AirPassengers)
[1] "ts"
> ## Un objet ts
> autoplot(AirPassengers)> p <- autoplot(AirPassengers)
> class(p)
[1] "gg" "ggplot"> p + ggtitle('AirPassengers') + xlab('Year') + ylab('Passengers')kmeans> set.seed(1)
> head(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
> p <- autoplot(kmeans(iris[-5], 3), data = iris)
> p> res <- lapply(c(3, 4, 5), function(x) kmeans(iris[-5], x))
> autoplot(res, data = iris[-5], ncol = 3)> df <- iris[c(1, 2, 3, 4)]
> autoplot(prcomp(df))> ## Ajouter une couleur avec une variable qualitative supplémentaire.
> autoplot(prcomp(df), data = iris, colour = 'Species')> # Mettre des labels sur les points avec des convexes de Hulls.
> autoplot(prcomp(df), data = iris, colour = 'Species', shape = FALSE, label.size = 3, frame=T)> # mettre les groupes dans des ellipses de confiance
> autoplot(prcomp(df), data = iris, colour = 'Species', shape = FALSE, label.size = 3, frame=T, frame.type = 'norm')> # Faire un biplot de la ACP
> autoplot(prcomp(df), data = iris, colour = 'Species',
+ loadings = TRUE, loadings.colour = 'blue',
+ loadings.label = TRUE, loadings.label.size = 3)> library(ggfortify)
> ggdistribution(dnorm, seq(-3, 3, 0.1), mean = 0, sd = 1)> library(ggfortify)
> ggdistribution(dnorm, seq(-3, 3, 0.1), mean = 0, sd = 1)density> autoplot(density(rnorm(1:50)), fill = 'green')> library(ggfortify)
> autoplot(lm(Petal.Width ~ Petal.Length, data = iris), label.size = 3)> m <- lm(Petal.Width ~ Petal.Length, data = iris)
> autoplot(m, which = 1:6, ncol = 3, label.size = 3)> autoplot(m, which = 1:6, colour = 'dodgerblue3',
+ smooth.colour = 'black', smooth.linetype = 'dashed',
+ ad.colour = 'blue',
+ label.size = 3, label.n = 5, label.colour = 'blue',
+ ncol = 3)> autoplot(lm(Petal.Width ~ Petal.Length, data = iris), data = iris,
+ colour = 'Species', label.size = 3)> library(lfda)
>
> # Local Fisher Discriminant Analysis (LFDA)
> model <- lfda(iris[-5], iris[, 5], r = 3, metric="plain")
> autoplot(model, data = iris, frame = TRUE, frame.colour = 'Species')> model <- self(iris[-5], iris[, 5], beta = 0.1, r = 3, metric="plain")
> autoplot(model, data = iris, frame = TRUE, frame.colour = 'Species')ggpairs du package GGallyCette fonction permet de visualiser des graphiques multidimensionnel sous différents formats. Voici quelques exemples:
tips (pourboire obtenus durant une période données en notant quelques caractéristiques des clients)> data(tips, package = "reshape")
> head(tips)
total_bill tip sex smoker day time size
1 16.99 1.01 Female No Sun Dinner 2
2 10.34 1.66 Male No Sun Dinner 3
3 21.01 3.50 Male No Sun Dinner 3
4 23.68 3.31 Male No Sun Dinner 2
5 24.59 3.61 Female No Sun Dinner 4
6 25.29 4.71 Male No Sun Dinner 4ggpairs pour étudier la relation entre le montant total de la facture et le montant du pourboire.> library(GGally)
> pm <- ggpairs(tips)
> pm
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.> pm <- ggpairs(tips, columns = c("total_bill", "time", "tip"), columnLabels = c("Total Bill", "Time of Day", "Tip"))
> pm
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.ggplot2 pour conditionner par rapport à une autre variable qualitative des données.> library(ggplot2)
> pm <- ggpairs(tips, mapping = aes(color = sex), columns = c("total_bill", "time", "tip"))
> pm
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.sjPlotGrapheRJGR et DeducerRcmdrrattleggvisLe but de ggvis est de le rendre facile à construire des graphiques interactifs pour l’exploration des données.
ggvis ressemble au package ggplot2 (la grammaire de graphiques), mais il permet de rendre vos graphiques interactives.
ggvis intègre également un modèle de programmation réactive similaire à ce qu’on peut avoir avec le package dplyr.
Les graphiques produits par ggvis sont des graphiques web et peuvent être intégrés dans pages html.
ggvis doit commencé par la commande ggvis() en spécifiant la variable qui va être présentée sur l’axe des x et une deuxième sur l’axe des y> library(ggvis)
Attaching package: 'ggvis'
The following object is masked from 'package:ggplot2':
resolution
> p <- ggvis(mtcars, x = ~wt, y = ~mpg)p seulement,> p
Guessing layer_points()> layer_points(p)layer. En voici quelques exemples, on pourrait tracer à la fois les points du diagramme de dispersion et la courbe d’ajustement.> p<-p%>%layer_points()%>%layer_smooths()
> pggplot2 on peut représenter une troisième variable en utilisant des arguments du type fill, size, stroke….> mtcars %>% ggvis(~mpg, ~disp, fill = ~vs) %>% layer_points()> mtcars %>% ggvis(~mpg, ~disp, size = ~vs) %>% layer_points()> mtcars %>% ggvis(~mpg, ~disp, shape = ~factor(cyl)) %>% layer_points():=.> mtcars %>% ggvis(~mpg, ~disp, fill:="red", stroke:="blue") %>% layer_points()> mtcars %>% ggvis(~wt, ~mpg, size := 300, opacity := 0.4) %>% layer_points()ggvis c’est qu’on peut ajouter de l’interactivité dans le graphique.> mtcars %>%
+ ggvis(~wt, ~mpg,
+ size := input_slider(10, 100),
+ opacity := input_slider(0, 1)
+ ) %>%
+ layer_points()width comme variable.> mtcars %>%
+ ggvis(~wt) %>%
+ layer_histograms(width = input_slider(0, 2, step = 0.10, label = "width"))> mtcars %>% ggvis(x = ~wt) %>%
+ layer_densities(
+ adjust = input_slider(.1, 2, value = 1, step = .1, label = "Bandwidth adjustment"),
+ kernel = input_select(
+ c("Gaussian" = "gaussian",
+ "Epanechnikov" = "epanechnikov",
+ "Rectangular" = "rectangular",
+ "Triangular" = "triangular",
+ "Biweight" = "biweight",
+ "Cosine" = "cosine",
+ "Optcosine" = "optcosine"),
+ label = "Kernel")
+ )> mtcars %>% ggvis(x= ~wt) %>%
+ layer_densities(
+ stroke := input_radiobuttons(c("Purple","Orange","steelblue"),
+ label="Line color"),
+ fill := input_select(c("Purple","Orange","steelblue"),
+ label="Fill color")
+ )rbokehBokeh est une bibliothèque de visualisation qui fournit un cadre déclaratif flexible et puissant pour créer des graphiques sur le Web.
Bokeh créé des graphiques en HTML et fournit de nombreux mécanismes pour l’interactivité. Bokeh a des interfaces en Python, Scala, Julia, et maintenant R.
Bokeh est écrit et maintenu par l’équipe de Bokeh de base composé de plusieurs membres du Continuum Analytics et d’autres membres de la communauté open source.
Le package rbokeh est écrit et maintenu par Ryan Hafen (@hafenstats) avec plusieurs contributions des autres. Les contributions sont les bienvenues.
rbokeh s’installe à partir de CRAN> install.packages("rbokeh")> library("rbokeh")figure(), puis en ajoutant des couches sur le grâce à plusieurs commandes disponibles dans rbokeh. L’entrée de données doit être faite en précisant x et y.Sepal.Length et Sepal.Width en colorant par rapport à la variable qualitative Species> library(rbokeh)
> p <- figure() %>%
+ ly_points(Sepal.Length, Sepal.Width, data = iris,
+ color = Species, glyph = Species,
+ hover = list(Sepal.Length, Sepal.Width))
> p> library(rbokeh)
> p <- figure(xlab = "Longeur des sépals",ylab="Largeur des sépals") %>%
+ ly_points(Sepal.Length, Sepal.Width, data = iris,
+ color = Species, glyph = Species,
+ hover = list(Sepal.Length, Sepal.Width))
> p> p <- figure(xlab = "Longeur des sépals",ylab="Largeur des sépals",
+ xlim=c(4.5,6.5),ylim=c(2.5,3.5)) %>%
+ ly_points(Sepal.Length, Sepal.Width, data = iris,
+ color = Species, glyph = Species,
+ hover = list(Sepal.Length, Sepal.Width))
> p> p <- figure(xlab = "Longeur des sépals",ylab="Largeur des sépals",
+ xgrid=F,ygrid=F) %>%
+ ly_points(Sepal.Length, Sepal.Width, data = iris,
+ color = Species, glyph = Species,
+ hover = list(Sepal.Length, Sepal.Width))
> p> p <- figure(xlab = "Longeur des sépals",ylab="Largeur des sépals",
+ padding_factor =1.5) %>%
+ ly_points(Sepal.Length, Sepal.Width, data = iris,
+ color = Species, glyph = Species,
+ hover = list(Sepal.Length, Sepal.Width))
> p> library(rbokeh)
> p <- figure(xlab = "Longeur des sépals",ylab="Largeur des sépals",
+ xaxes=F,yaxes=F) %>%
+ ly_points(Sepal.Length, Sepal.Width, data = iris,
+ color = Species, glyph = Species,
+ hover = list(Sepal.Length, Sepal.Width))
> p> library(rbokeh)
> p <- figure(legend_location = "bottom_left") %>%
+ ly_points(Sepal.Length, Sepal.Width, data = iris,
+ color = Species, glyph = Species,
+ hover = list(Sepal.Length, Sepal.Width))
> p> p <- figure(logo=NULL) %>%
+ ly_points(Sepal.Length, Sepal.Width, data = iris,
+ color = Species, glyph = Species,
+ hover = list(Sepal.Length, Sepal.Width))
> p> z <- lm(dist ~ speed, data = cars)
> p <- figure(width = 600, height = 600) %>%
+ ly_points(cars, hover = cars) %>%
+ ly_lines(lowess(cars), legend = "lowess") %>%
+ ly_abline(z, type = 2, legend = "lm")
> p> library(maps)
# maps v3.1: updated 'world': all lakes moved to separate new #
# 'lakes' database. Type '?world' or 'news(package="maps")'. #
> data(world.cities)
> head(world.cities)
name country.etc pop lat long capital
1 'Abasan al-Jadidah Palestine 5629 31.31 34.34 0
2 'Abasan al-Kabirah Palestine 18999 31.32 34.35 0
3 'Abdul Hakim Pakistan 47788 30.55 72.11 0
4 'Abdullah-as-Salam Kuwait 21817 29.36 47.98 0
5 'Abud Palestine 2456 32.03 35.07 0
6 'Abwein Palestine 3434 32.03 35.20 0
> caps <- subset(world.cities, capital == 1) ## On récupère les capitales
> head(caps)
name country.etc pop lat long capital
26 'Amman Jordan 1303197 31.95 35.93 1
265 Abu Dhabi United Arab Emirates 619316 24.48 54.37 1
280 Abuja Nigeria 178462 9.18 7.17 1
308 Accra Ghana 2029143 5.56 -0.20 1
366 Adamstown Pitcairn 51 -25.05 -130.10 1
382 Addis Abeba Ethiopia 2823167 9.03 38.74 1
> caps$population <- prettyNum(caps$pop, big.mark = ",")
> head(caps)
name country.etc pop lat long capital
26 'Amman Jordan 1303197 31.95 35.93 1
265 Abu Dhabi United Arab Emirates 619316 24.48 54.37 1
280 Abuja Nigeria 178462 9.18 7.17 1
308 Accra Ghana 2029143 5.56 -0.20 1
366 Adamstown Pitcairn 51 -25.05 -130.10 1
382 Addis Abeba Ethiopia 2823167 9.03 38.74 1
population
26 1,303,197
265 619,316
280 178,462
308 2,029,143
366 51
382 2,823,167
> figure(width = 800, padding_factor = 0) %>%
+ ly_map("world", col = "gray") %>%
+ ly_points(long, lat, data = caps, size = 5,
+ hover = c(name, country.etc, population))