Scatterpie pie plot: circles not properly positioned over map

Please find below one possible solution to your request. The main problem was that geom_scatterpie() expects a dataframe and not an sf object. So you need to use as.data.frame() inside geom_scatterpie(). I also took the opportunity to simplify your code a bit.

Reprex

  • Code
library(giscoR)
library(sf)
library(dplyr)
library(ggplot2)
library(scatterpie)


borders <- gisco_get_countries(
  epsg = "3035",
  year = "2020",
  resolution = "3",
  country = idf$Country
)

merged <- merge(borders,
                idf,
                by.x = "CNTR_ID",
                by.y = "Country",
                all.x = TRUE
)


symbol_pos <- st_centroid(merged, of_largest_polygon = TRUE)

sympos <- symbol_pos %>% 
  st_drop_geometry() %>% 
  as.data.frame() %>% 
  cbind(., symbol_pos %>% st_coordinates()) %>% 
  select(CNTR_ID, X, Y) %>% 
  rename(Country = CNTR_ID, long = X, lat = Y)


merged <- merge(merged,
                sympos,
                by.x = "CNTR_ID",
                by.y = "Country",
                all.x = TRUE
)
  • Visualization
ggplot() + 
  geom_sf(data = merged, size = 0.1) + 
  geom_scatterpie(data = as.data.frame(merged), aes(x = long, y = lat, r = Total*2200), cols = LETTERS[1:7]) + 
  coord_sf(xlim = c(2377294, 6500000), ylim = c(1413597, 5228510))

Created on 2022-01-23 by the reprex package (v2.0.1)