J'essaye de dessiner plusieurs cartes du paquet tmap en utilisant tm_shape() et tm_layout() dans une page en utilisant grid.layout() du paquet grid. Je voudrais tracer une seule légende commune pour toutes les cartes, comme dans l'exemple montré ici:Dessiner plusieurs objets de la classe tmap avec une seule légende commune
ggplot separate legend and plot
Malheureusement, tmap ne fournit pas un ggplot objet. Est-ce que quelqu'un sait comment faire la même chose avec tmaps? Voici un exemple reproductible:
data(World, rivers, metro)
# creating two separate maps
africa <- World[[email protected]$continent=='Africa',]
asia <- World[[email protected]$continent=='Asia',]
my.breaks <- seq(0,80,20)
africa.map <- tm_shape(africa) +
tm_fill("HPI",style = 'fixed',breaks = my.breaks) +
tm_layout(bg.color = "white", legend.text.size = 1.3, legend.width = 0.6,
legend.outside=TRUE, legend.outside.position = 'top',
legend.outside.size = .1, legend.position = c(0.8, 0.2))
asia.map <- tm_shape(asia) +
tm_fill("HPI",style = 'fixed',breaks = my.breaks) +
tm_layout(bg.color = "white", legend.text.size = 1.3, legend.width = 0.6,
legend.outside=TRUE, legend.outside.position = 'top',
legend.outside.size = .1, legend.position = c(0.8, 0.2))
page.layout <- grid.layout(nrow = 8, ncol = 5,
widths = unit(c(1), "null"),
heights = unit(c(1), "null"),
default.units = "null",
respect = FALSE,
just = "centre")
grid.newpage()
pushViewport(viewport(layout = page.layout))
grid.text(paste('Happy Planet Index'),
vp = viewport(layout.pos.row = 1, layout.pos.col = 1:5),gp=gpar(fontsize=20))
grid.text('Africa', vp = viewport(layout.pos.row = 2, layout.pos.col = 1:2),gp=gpar(fontsize=20))
print(africa.map, vp=viewport(layout.pos.row = 3:6, layout.pos.col = 1:2))
grid.text('Asia', vp = viewport(layout.pos.row = 2, layout.pos.col = 3:5),gp=gpar(fontsize=20))
print(asia.map, vp=viewport(layout.pos.row = 3:6, layout.pos.col = 3:5))
Best, Erich
C'est certainement possible. Pourriez-vous poster un exemple reproductible de ce que vous voulez accomplir? –
Merci Martijn! J'ai ajouté un exemple. Ce que je veux faire est de dessiner seulement une légende commune pour les deux cartes, mieux en séparant la légende de la carte et en la traçant séparément n'importe où dans la zone de traçage comme dans l'exemple de ggplot2. Mais je suis content si vous avez une meilleure solution. – Erich