rggplot2scatterpie

How to add a line to connect between pies in a scatterpie plot?


I have a scatterpie plot with pies plotted over x and y axes. How can I add straight lines that connect between pies? Ideally, I would want the lines to connect the y-values underlying the center points of the pies.

I tried adding geom_path but it didn't work out.

This question is a follow-up on this question I posted before.

My Data

library(tidyverse)
library(scatterpie)

my_df <- structure(list(day_in_july = 13:20, yes_and_yes = c(0.611814345991561, 
0.574750830564784, 0.593323216995448, 0.610539845758355, 0.650602409638554, 
0.57429718875502, 0.575971731448763, 0.545454545454545), yes_but_no = c(0.388185654008439, 
0.425249169435216, 0.406676783004552, 0.389460154241645, 0.349397590361446, 
0.42570281124498, 0.424028268551237, 0.454545454545455), y = c(0.388185654008439, 
0.425249169435216, 0.406676783004552, 0.389460154241645, 0.349397590361446, 
0.42570281124498, 0.424028268551237, 0.454545454545455)), row.names = c(NA, 
-8L), class = c("tbl_df", "tbl", "data.frame"))



My current scatterpie plot


p <- ggplot(data = my_df) +
  geom_scatterpie(aes(x = day_in_july, y = y*50, r = 0.3), 
                  data = my_df, 
                  cols = colnames(my_df)[2:3],
                  color = "red") + 
  geom_text(aes(y = y*50, x = day_in_july, 
                label = paste0(formatC(y*100, digits = 3), "%")),
            nudge_y = 0.07, nudge_x = -0.25, size = 3) +
  geom_text(aes(y = y*50, x = day_in_july, 
            label = paste0(formatC((1-y)*100, digits = 3), "%")),
            nudge_y = -0.07, nudge_x = 0.25, size = 3) +
  scale_fill_manual(values = c("pink", "seagreen3")) +
  scale_x_continuous(labels = xvals, breaks = xvals) +
  scale_y_continuous(name = "yes but no",
                     labels = function(x) x/50) + 
  coord_fixed()

> p

scatterpie



I want to connect the pies to express a trend over time, such as the following:

scatterpie_connected

p + geom_path(x = as.numeric(my_df$day_in_july), y = my_df$yes_but_no)

Solution

  • Just add geom_path with the same x and y aesthetics at the beginning of your code:

    p <- ggplot(data = my_df) +
      geom_path(aes(x = day_in_july, y = y*50)) +
      geom_scatterpie(aes(x = day_in_july, y = y*50, r = 0.3), 
                      data = my_df, 
                      cols = colnames(my_df)[2:3],
                      color = "red") + 
      geom_text(aes(y = y*50, x = day_in_july, 
                    label = paste0(formatC(y*100, digits = 3), "%")),
                nudge_y = 0.07, nudge_x = -0.25, size = 3) +
      geom_text(aes(y = y*50, x = day_in_july, 
                    label = paste0(formatC((1-y)*100, digits = 3), "%")),
                nudge_y = -0.07, nudge_x = 0.25, size = 3) +
      scale_fill_manual(values = c("pink", "seagreen3")) +
      # scale_x_continuous(labels = xvals, breaks = xvals) +
      scale_y_continuous(name = "yes but no",
                         labels = function(x) x/50) + 
      coord_fixed()
    

    enter image description here