如何对与实际绘制数据不同的数据使用 geom_smooth()?

Cht*_*ect 1 plot r ggplot2

我有一个使用 ggplot2 的折线图,其中包含三行(在我的数据框中有变量名称,例如“A”、“B”和“C”)。我想添加一个 geom_smooth 使用method=loess,但我想添加基于“B”和“C”的最小值的回归线。有没有办法做到这一点?

为了说明,这是一个模拟代码:

names  <- c('n1', 'n2', 'n3', 'n4', 'n5')
aline  <- c(0.18, 0.21, 0.23, 0.20, 0.16)
bline  <- c(0.50, 0.40, 0.30, 0.20, 0.10)
cline  <- c(0.14, 0.20, 0.30, 0.35, 0.33)
min_bc <- c(0.14, 0.20, 0.30, 0.20, 0.10)
df <- data.frame(name, aline, bline, cline)
df.m <- melt(df)
g <- ggplot(df.m, aes(group=1, names, value, colour=variable))
g <- g + geom_line(aes(group=variable))
g <- g + geom_point(aes(colour=variable), alpha=0.4)
Run Code Online (Sandbox Code Playgroud)

我想使用alineand添加回归线min_bc,而不实际绘制min_bc

另外,我想把它放在:一般来说,我可能有一些数据,我想使用不同的数据转换来绘制(在同一个图中)不同的线(或点、条形等)。是否有任何综合文档可以让我大致了解如何在 R/ggplot 中执行此类操作?

Pau*_*tra 5

通常,将与主调用中的绘图相关的数据集设置为ggplot

ggplot(data, aes()) + geom_point()
Run Code Online (Sandbox Code Playgroud)

但是,您也可以为以下各项单独设置数据集geom

ggplot(data1, aes()) + geom_point(data = data2)
Run Code Online (Sandbox Code Playgroud)

使用此技术,您可以预先计算要绘制 LOESS 的数据集,并将其提供给geom_smooth()。下面的例子证实了这个假设:

df1 = data.frame(x = 1:100, y = runif(100))
df2 = data.frame(x = 1:100, y = runif(100) + 1)
ggplot(df1, aes(x, y)) + geom_point() + geom_smooth(data = df2)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

在此示例中,两个数据集具有相同的列名称。如果不是这种情况,您还需要调整内的aes设置geom_smooth.

请记住,绘制另一个数据集的平滑图而不是您在其下方绘制的数据集可能会使事情变得非常不清楚。