将 geom_point 分割为象限并按组着色

use*_*634 1 r ggplot2

我希望在 R 中创建一个图,其中的点分为四个象限(如附图所示),然后根据组将颜色应用于每个象限。我的搜索并没有得到太多结果,所以我不太确定从哪里开始构建这段代码。理想情况下,这将使用 ggplot,但任何建议都会受到赞赏。

分割点

Dav*_*ald 5

我认为这就是您最需要寻找的:

我将使用iris数据作为示例,Petal.Length绘制在x-axisPetal.Widthy-axis

x首先,计算和轴的中点y

x_mid <- mean(c(max(iris$Petal.Length, na.rm = TRUE), 
                min(iris$Petal.Length, na.rm = TRUE)))

y_mid <- mean(c(max(iris$Petal.Width, na.rm = TRUE), 
                min(iris$Petal.Width, na.rm = TRUE)))
Run Code Online (Sandbox Code Playgroud)

现在,我将使用dplyr将每个点分配给一个象限mutate,然后将其通过管道传输到ggplot2

library(dplyr)
library(ggplot2)

iris %>% 
  mutate(quadrant = case_when(Petal.Length > x_mid & Petal.Width > y_mid   ~ "Q1",
                              Petal.Length <= x_mid & Petal.Width > y_mid  ~ "Q2",
                              Petal.Length <= x_mid & Petal.Width <= y_mid ~ "Q3",
                              TRUE                                         ~ "Q4")) %>% 
  ggplot(aes(x = Petal.Length, y = Petal.Width, color = quadrant)) +
  geom_vline(xintercept = x_mid) + # plot vertical line
  geom_hline(yintercept = y_mid) + # plot horizontal line
  geom_point()
Run Code Online (Sandbox Code Playgroud)

这给了我们以下结果:

象限图

如果您想更改处理直接落在象限线上的值的方式,您可以使用>=或符号。<

另外,如果您不需要图例,只需guides(color = FALSE)在末尾添加即可

  • 如果确实如此,我建议使用 `ggforce` 或 `scatterpie`:https://guangchuangyu.github.io/2016/12/scatterpie-for-plotting-pies-on-ggplot/ (2认同)