分组数据上的ggplot方面

Posted

技术标签:

【中文标题】分组数据上的ggplot方面【英文标题】:ggplot facets on grouped data 【发布时间】:2021-12-31 10:19:34 【问题描述】:

我有一个数据框(df 如下),我想根据一些分组(CycleNumber 和象限)绘制 x 和 y 变量的均值。

分组后,我想绘制一个多面 xy 图(基于 CycleNumber 分组)。但是,ggplot2 代码返回错误,我无法修复它。 非常感谢任何帮助。

set.seed(1234)
df <- data.frame(CycleNumber = c(rep("Cut1",10), rep("Cut2",10), rep("Hike1",10),rep("Hike2",10) ),
                                 x= rnorm(n=40, mean =0, sd = 1), 
                                 y= rnorm(n=40, mean = 0,sd=1)
                 )


> head(df)
  CycleNumber          x          y
1        Cut1 -1.2070657  1.4494963
2        Cut1  0.2774292 -1.0686427
3        Cut1  1.0844412 -0.8553646
4        Cut1 -2.3456977 -0.2806230
5        Cut1  0.4291247 -0.9943401
6        Cut1  0.5060559 -0.9685143

## Below is the function to calculate the quadrant in XY scatter plot

which_quadrant <- function(x, y, xintercept, yintercept, pool.along = "none") 
  z <- ifelse(x >= xintercept & y >= yintercept,
              1L, 
              ifelse(x >= xintercept & y < yintercept,
                     2L,
                     ifelse(x < xintercept & y < yintercept,
                            3L,
                            4L
                     )
              )
  )
  if (pool.along == "x") 
    z <- ifelse(z %in% c(1L, 4L), 1L, 2L)
   else if (pool.along == "y") 
    z <- ifelse(z %in% c(1L, 2L), 1L, 4L)
  
  z


df.quadrant <- df %>% mutate(quadrant = which_quadrant(x=x, y=y, xintercept = 0, yintercept = 0))

> head(df.quadrant)
  CycleNumber          x          y quadrant
1        Cut1 -1.2070657  1.4494963        4
2        Cut1  0.2774292 -1.0686427        2
3        Cut1  1.0844412 -0.8553646        2
4        Cut1 -2.3456977 -0.2806230        3
5        Cut1  0.4291247 -0.9943401        2
6        Cut1  0.5060559 -0.9685143        2

df.quadrant %>% group_by(CycleNumber, quadrant) %>% summarise(xmean = mean(x), ymean = mean(y)) %>% 
ggplot(aes(x=xmean, y = ymean )) + geom_point()

上述 ggplot2 代码无需刻面即可工作。但是如果我尝试使用代码进行分面

df.quadrant %>% group_by(CycleNumber, quadrant) %>% summarise(xmean = mean(x), ymean = mean(y)) %>% 
ggplot(aes(x=xmean, y = ymean )) + geom_point() + facet_grid(CycleNumber)

我得到了错误

Error in grid_as_facets_list(rows, cols) : object 'CycleNumber' not found

请帮忙。

【问题讨论】:

请仅包含最少的代码来重现您的问题。在这种情况下,df.quadrant 定义之前的所有数据争吵都是无关紧要的。我建议您将第一个代码块中最后两行以上的所有内容替换为 dput(df.quadrant, 20) 的输出 【参考方案1】:

我的菜鸟错误

df.quadrant %>% group_by(CycleNumber, quadrant) %>% summarise(xmean = mean(x), ymean = mean(y)) %>%
  ggplot(aes(x=xmean, y = ymean , shape = CycleNumber)) + geom_point() + geom_quadrant_lines() + facet_grid(CycleNumber~.,)

它有效!

【讨论】:

以上是关于分组数据上的ggplot方面的主要内容,如果未能解决你的问题,请参考以下文章

将带 ** 的显着性水平括号添加到分组箱线图中; ggplot

ggplot2::coord_cartesian 在方面

ggplot2 配色

ggplot2:方面的连续和离散比例

在ggplot2中的单个方面注释文本

在ggplot的一个方面内按组分隔geom_linerange