如何添加一条线以连接散点图中的饼图?

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

我有一个散点图,饼图绘制在 x 轴和 y 轴上。如何添加连接饼图的直线?理想情况下,我希望线条连接饼图中心点下方的 y 值。

我尝试添加 geom_path 但没有成功。

此问题是我之前发布的 问题的后续问题。

我的数据

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"))



我当前的散点图


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



我想把饼图连起来表达一个随时间变化的趋势,比如下面这样:

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

只需在代码开头添加具有相同 xy 美学的 geom_path

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()