为什么馅饼在 geom_scatterpie 中是扁平的?

Why pies are flat in geom_scatterpie in R?

为什么馅饼是扁平的?

    df<- data.frame(
      Day=(1:6),
      Var1=c(172,186,191,201,205,208),
      Var2= c(109,483,64010,161992,801775,2505264), A=c(10,2,3,4.5,16.5,39.6), B=c(10,3,0,1.4,4.8,11.9), C=c(2,5,2,0.1,0.5,1.2), D=c(0,0,0,0,0.1,0.2))

ggplot() + 
  geom_scatterpie(data = df, aes(x = Var1 , y = Var2, group = Var1), cols = c("A", "B", "C", "D")) 

我试过 coord_fixed() 也没有用。

问题似乎出在 x- 和 y-axes 的比例上。如果您将它们重新调整为均值和单位方差均为零,则该图有效。因此,您可以做的一件事是绘制重新缩放的值,但将标签转换回原始比例。为此,您必须执行以下操作:

制作数据:

df<- data.frame(
    Day=(1:6),
    Var1=c(172,186,191,201,205,208),
    Var2= c(109,483,64010,161992,801775,2505264), A=c(10,2,3,4.5,16.5,39.6), B=c(10,3,0,1.4,4.8,11.9), C=c(2,5,2,0.1,0.5,1.2), D=c(0,0,0,0,0.1,0.2))

重新缩放变量

df <- df %>% 
    mutate(x = c(scale(Var1)), 
           y = c(scale(Var2)))

找到将重新缩放的值转换回其原始值的线性映射。然后,您可以使用模型中的系数创建一个函数,将重新缩放的值转换回原始值。

m1 <- lm(Var1 ~ x, data=df)
m2 <- lm(Var2 ~ y, data=df)
trans_x <- function(x)round(coef(m1)[1] + coef(m1)[2]*x)
trans_y <- function(x)round(coef(m2)[1] + coef(m2)[2]*x)

制作绘图,使用转换函数作为对 scale_[xy]_continuous() 函数中标签的调用

ggplot() + 
    geom_scatterpie(data=df, aes(x = x, y=y), cols = c("A", "B", "C", "D")) + 
    scale_x_continuous(labels = trans_x) + 
    scale_y_continuous(labels = trans_y) + 
    coord_fixed() 

可能有比这更简单的方法,但对我来说并不明显。

y-axis 上的范围太大,以至于将磁盘压缩成行。将 y-axis 更改为对数刻度,您可以看到形状。添加 coord_fixed() 以保持馅饼的圆形:

ggplot() + 
  geom_scatterpie(data = df, aes(x = Var1 , y = Var2, group = Var1), cols = c("A", "B", "C", "D")) +
  scale_y_log10() +
  coord_fixed()