0

为什么馅饼是平的?

    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(),但也不起作用。

在此处输入图像描述

4

2 回答 2

2

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

制作数据:

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

在此处输入图像描述

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

于 2022-01-25T14:40:03.930 回答
1

y 轴上的范围是如此之大,以至于将磁盘压缩为线。将 y 轴更改为对数刻度,您可以看到形状。添加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()

在此处输入图像描述

于 2022-01-25T14:48:10.723 回答