我正在绘制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))?
7kqas0il1#
您可以使用函数代替data.frame作为层的data参数来子集化数据。此函数将被提供作为ggplot参数的全局数据,并且结果将被层使用。
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))
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函数。
geom_*
dplyr::filter
subset
jslywgbw3#
你可以使用ggplot_build来过滤两个geom图层的x值。所以首先过滤第一个图层[[1]]和第二个图层[[2]]来显示你想要的范围。下面是一个可重复的例子:
ggplot_build
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
3条答案
按热度按时间7kqas0il1#
您可以使用函数代替
data.frame
作为层的data
参数来子集化数据。此函数将被提供作为ggplot
参数的全局数据,并且结果将被层使用。n9vozmp42#
作为@Billy34方法的一种变体,您可以用途:
geom_*
函数具有data
作为它们的第二参数,对于该参数,我们可以使用tidyverse语法来生成lambda函数以操纵数据,使用与我们可能如何使用dplyr::filter
类似的基subset
函数。jslywgbw3#
你可以使用
ggplot_build
来过滤两个geom图层的x
值。所以首先过滤第一个图层[[1]]
和第二个图层[[2]]
来显示你想要的范围。下面是一个可重复的例子:创建于2023年1月4日,使用reprex v2.0.2