gpt4 book ai didi

r - 如何添加线以将回归线上的点连接到 ggplot 上的 x 和 y 轴?

转载 作者:行者123 更新时间:2023-12-03 17:08:08 29 4
gpt4 key购买 nike

如何添加将回归方程连接到 x 轴上的特定点和 y 轴上的相应值的线?
这是一个可重现的示例:

library(ggplot2)
library(ggpmisc)

x<-c(1,2,3,5,10,12,15,20,22,25,30,33,37)

y<-c(1000,800,100,10,1,0.3,0.25,0.2,0.1,0.1,0.03,0.05,0.03)

myformula<-y ~ poly(x,3)

df <- data.frame(x, y)

ggplot(df, aes(x,y)) +
stat_smooth(method = lm, formula = myformula) +
geom_point() +
stat_smooth(method = lm, formula = myformula) +
stat_poly_eq(formula = myformula, eq.with.lhs = "italic(psi)~`=`~",
eq.x.rhs = "~italic(theta)",
aes(label = paste(..eq.label.., ..rr.label..,
sep = "~~~~")), label.x=0.15, parse = TRUE)+
xlim(0, 40)+
ylim(0, 2000)+
scale_y_log10(breaks = c(0, 0.1,10,1000), labels= c(0,0.1, 10,1000))
这就是我所拥有的:
enter image description here
这就是我想要的:
enter image description here

最佳答案

您首先要保存您的绘图以备后用,这里我将其保存到对象 p 中。 (我忽略了与您的问题无关的内容)。

p <- ggplot(df, aes(x,y)) + 
stat_smooth(method = lm, formula = myformula) +
geom_point() +
xlim(0, 40) +
scale_y_log10(breaks = c(0, 0.1,10,1000), labels= c(0,0.1, 10,1000))
ggplot2包有一个功能 ggplot_build()这使您可以观察情节的所有气质。
plot_str <- ggplot_build(p)
创建的对象是一个列表,它有一个 data元素,它本身就是用于构建绘图的每个几何图形的所有数据框的列表。这里我们对折线图感兴趣,它是该列表中的第二个数据框。
head(plot_str$data[[2]])
x y ymin ymax se flipped_aes PANEL group colour fill size linetype weight alpha
1 1.000000 3.019354 2.645929 3.392780 0.1650750 FALSE 1 -1 #3366FF grey60 1 1 1 0.4
2 1.455696 2.796358 2.458116 3.134599 0.1495218 FALSE 1 -1 #3366FF grey60 1 1 1 0.4
3 1.911392 2.581749 2.273151 2.890348 0.1364177 FALSE 1 -1 #3366FF grey60 1 1 1 0.4
4 2.367089 2.375366 2.090702 2.660030 0.1258375 FALSE 1 -1 #3366FF grey60 1 1 1 0.4
5 2.822785 2.177044 1.910571 2.443518 0.1177963 FALSE 1 -1 #3366FF grey60 1 1 1 0.4
6 3.278481 1.986621 1.732776 2.240466 0.1122137 FALSE 1 -1 #3366FF grey60 1 1 1 0.4
现在我们可以捕获几个点。在这里,我捕获了第 5 行和第 70 行。
specific_points <- plot_str$data[[2]][c(5, 70), ]
然后回到图的早期版本,我添加了一些引用这些点的段几何体。
p + 
geom_segment(y = specific_points$y[1], yend = specific_points$y[1], x = -Inf, xend = specific_points$x[1]) +
geom_segment(y = specific_points$y[1], yend = -Inf, x = specific_points$x[1], xend = specific_points$x[1], linetype = "dashed") +
geom_segment(y = specific_points$y[2], yend = specific_points$y[2], x = -Inf, xend = specific_points$x[2]) +
geom_segment(y = specific_points$y[2], yend = -Inf, x = specific_points$x[2], xend = specific_points$x[2], linetype = "dashed")
enter image description here

关于r - 如何添加线以将回归线上的点连接到 ggplot 上的 x 和 y 轴?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66148676/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com