我现在使用 facet 按不同的i值绘制多个分布图,并在相应的图上找到每条回归线的斜率。
我的数据集格式如下,这里是整个文件的链接(https://drive.google.com/file/d/0B_biBFUMCaA2SGlFc2I0OTd3djA/view?usp=sharing)
我使用以下R代码绘制多个图:
bound = read.csv("strength_distribution")
sp <- ggplot(bound, aes(x,y)) + geom_point(shape=1)+
scale_y_log10()+ scale_x_log10()+ggtitle("Node Strength Distribution")+
theme(plot.title= element_text(size =16, face ="bold",
lineheight = 8, vjust=1), aspect.ratio=1)+
stat_smooth(method="lm", se = FALSE) + scale_shape_identity()
sp + facet_wrap( ~ i, ncol=3, scales = "free_x" )
ggplotly()
然后我得到以下情节:
我发现有多种方法可以计算一个图的回归线的斜率,但是没有关于编写函数的线索来计算多个图中多个回归线的斜率。有谁知道如何处理这种情况?感谢。
答案 0 :(得分:1)
rawr在评论中为您提供了完美答案,但如果您有兴趣......
如果您对数据的子集做了相当复杂的事情,那么值得查看R中的group_by() %>% nest() %>% map()
工作流程。我将用一个简单的示例演示:
library(dplyr)
library(tidyr)
library(purrr)
data(iris)
这些是您想要应用于子集的一些功能。
doModel <- function(dat) lm(Sepal.Length ~ Sepal.Width, dat)
getSlope <- function(mod) coef(mod)[2]
您可以按如下方式应用它们。
models <- iris %>%
group_by(Species) %>%
nest %>%
mutate(model = map(data, doModel)) %>%
mutate(slope = map(model, getCoef))
models$slope
发生的事情是您在带有nest()
的data.frame中创建了一些data.frame。然后,您使用map()
将函数应用于每个子data.frame。如果您对每个子集都要做很多细微的事情,那么这种工作流程会非常有用。
我强烈建议您观看hadleys talk on this。如果你愿意,很乐意提供更多帮助...