R语言 为不同的几何设置不同的坐标限制(xlim或ylim

slsn1g29  于 2023-01-06  发布在  其他
关注(0)|答案(3)|浏览(210)

我正在绘制logistic回归的多个预测值,给出不同的协变量值。本质上,我需要做的是为每个绘制的不同几何体设置相应的xlim()。下面是一个使用2个不同几何体的示例:

ggplot(mtcars,aes(x = mpg)) +
  geom_point(aes(y = wt)) +
  geom_smooth(aes(y = qsec))

在这个例子中,我如何限制geom_point只显示特定的值(比如xlim(15,20)),而geom_smooth有不同的值(比如xlim(25,30))?

7kqas0il

7kqas0il1#

您可以使用函数代替data.frame作为层的data参数来子集化数据。此函数将被提供作为ggplot参数的全局数据,并且结果将被层使用。

ggplot(mtcars,aes(x = mpg)) +
  geom_point(
    aes(y = wt), 
    data = function(data) {
      data[data$mpg>=15 & data$mpg<=20,]
    }
  ) +
  geom_smooth(aes(y = qsec))
n9vozmp4

n9vozmp42#

作为@Billy34方法的一种变体,您可以用途:

ggplot(mtcars,aes(x = mpg)) +
  geom_point(aes(y = wt), ~subset(., mpg >=15 & mpg <=20)) +
  geom_smooth(aes(y = qsec))

geom_*函数具有data作为它们的第二参数,对于该参数,我们可以使用tidyverse语法来生成lambda函数以操纵数据,使用与我们可能如何使用dplyr::filter类似的基subset函数。

jslywgbw

jslywgbw3#

你可以使用ggplot_build来过滤两个geom图层的x值。所以首先过滤第一个图层[[1]]和第二个图层[[2]]来显示你想要的范围。下面是一个可重复的例子:

library(ggplot2)
p <- ggplot(mtcars,aes(x = mpg)) +
  geom_point(aes(y = wt)) +
  geom_smooth(aes(y = qsec))

q <- ggplot_build(p)

# first layer is geom point
q$data[[1]] <- q$data[[1]][q$data[[1]]$x >= 15 & q$data[[1]]$x <= 20, ]
# second layer is geom smooth
q$data[[2]] <- q$data[[2]][q$data[[2]]$x >= 25 & q$data[[2]]$x <= 30, ]

q <- ggplot_gtable(q)

plot(q)

创建于2023年1月4日,使用reprex v2.0.2

相关问题