It's working, I feel you are trying to do two things at a time. Let's try to get the data and visualize it.
library(ggplot2)
library(ggmap)
library(cowplot)
# 1] Load the global map of Latin America
xlimsAmerica <- c(-100, -30)
ylimsAmerica <- c(30, -56)
# Retrieve the map in the desired mode
# -> (terrain-background i.e. nice google map without information)
Amerique_Centrale <-
get_stamenmap(
bbox = c(
left = min(xlimsAmerica),
bottom = min(ylimsAmerica),
right = max(xlimsAmerica),
top = max(ylimsAmerica)
),
maptype = "terrain-background",
zoom = 6
)
Amerique_Centrale <- ggmap(Amerique_Centrale)
If you wish to save the data for further use, then fine, however I would suggest to store the data before applying ggmap() to them.
# save with save() in R.data format (will suffice to load() to get the file)
save(Amerique_Centrale, file = "donnees_Amérique_Latine.RData")
# save with ggsave()
# save by default the last plot made
ggsave("Carte_Amerique_Latine.png", width = 12 , height = 20)
Let's load Guadeloupe:
# 2] Load map of Guadeloupe
xlimsGuadeloupe <- c(-61.85, -61)
ylimsGuadeloupe <- c(15.75, 16.55)
# we get the map according to the desired mode
Guadeloupe <- get_stamenmap(
bbox = c(
left = min(xlimsGuadeloupe),
bottom = min(ylimsGuadeloupe),
right = max(xlimsGuadeloupe),
top = max(ylimsGuadeloupe)
),
maptype = "terrain-background",
# type of map to represent
zoom = 11
)
Now a tricky part, we plot Guadeloupe with ggmap(), hovewer at the same time we remove the x and y axis labels and scales:
Guadeloupe <- ggmap(Guadeloupe) +
labs(x = "", y = "") +
ggthemes::theme_map()
Guadeloupe

The same for Madagascar:
# 3] Load map of Madagascar
xlimsMadagascar <- c(40, 55)
ylimsMadagascar <- c(-10, -27)
# get the map in the desired mode
Madagascar <- get_stamenmap(
bbox = c(
left = min(xlimsMadagascar),
bottom = min(ylimsMadagascar),
right = max(xlimsMadagascar),
top = max(ylimsMadagascar)
),
maptype = "terrain-background",
zoom = 8
)
Madagascar <- ggmap(Madagascar) +
labs(x = "", y = "") +
ggthemes::theme_map()
Madagascar

And let's plot everything as you tried, just using ggdraw() function:
# 4] Plot everything in 1 (SOURCE: https://r-spatial.org/r/2018/10/25/ggplot2-sf-3.html )
ratioGuadeloupe <- (2500000 - 200000) / (1600000 - (-2400000))
ratioMadagascar <- (23 - 18) / (-154 - (-161))
ggdraw(Amerique_Centrale) +
draw_plot(
Guadeloupe,
width = 0.26,
height = 0.26 * 10 / 6 * ratioGuadeloupe,
x = 0.6,
y = 0.78
) +
draw_plot(
Madagascar,
width = 0.26,
height = 0.26 * 10 / 6 * ratioMadagascar,
x = 0.6,
y = 0.05
)

You can add borders to Madagascar and Guadeloupe like:
Guadeloupe <- ggmap(Guadeloupe) +
labs(x = "", y = "") +
ggthemes::theme_map() +
theme(
panel.border = element_rect(colour = "grey20", fill=NA, size=2)
)
Back to your error with as.grob(). as.grob() function expects an object which is kind of ggplot. Therefore it shows an error, when trying to substitute map class data. Please have a look below:
We are importing tiles and create map
Guadeloupe <- get_stamenmap(
bbox = c(
left = min(xlimsGuadeloupe),
bottom = min(ylimsGuadeloupe),
right = max(xlimsGuadeloupe),
top = max(ylimsGuadeloupe)
),
maptype = "terrain-background",
# type of map to represent
zoom = 11
)
Running as.grob() now gives us an error:
as.grob(Guadeloupe)
#> Error in UseMethod("as.grob"): no applicable method for 'as.grob' applied to an object of class "c('ggmap', 'raster')"
However, plotting Guadeloupe with ggmap and reasigning it back to Guadeloupe makes things a bit different:
Guadeloupe <- ggmap(Guadeloupe) +
labs(x = "", y = "") +
ggthemes::theme_map() +
theme(
panel.border = element_rect(colour = "grey20", fill=NA, size=2)
)
as.grob(Guadeloupe)
#> TableGrob (12 x 9) "layout": 18 grobs
#> z cells name grob
#> 1 0 ( 1-12, 1- 9) background zeroGrob[plot.background..zeroGrob.36]
#> 2 5 ( 6- 6, 4- 4) spacer zeroGrob[NULL]
#> 3 7 ( 7- 7, 4- 4) axis-l absoluteGrob[GRID.absoluteGrob.28]
[...]
Hope it makes sense,
Grzegorz
Created on 2022-02-04 by the reprex package (v2.0.1)