英文:
using a custom function for smoothing
问题
我最近开始学习R,并在绘图时使用自定义函数时遇到了问题。
我想要使用罗森-拉姆勒方程,但不知道如何在我的情况下使用它。在Mathkad中,这很容易解决。但在这里,我无法理解。
这是我的数据和代码示例:
ggplot(allOnw, aes(x = xy, y=yy, col = sem1)) + geom_point() +
guides(fill = FALSE) + labs(col="S") + theme(legend.position="bottom") +
scale_x_continuous(breaks = seq(from = 0, to = 160, by = 10), limits = c(0,160)) +
scale_color_manual(values = c("blue", "cyan", "darkgreen", "darkorange", "gold", "darkorchid")) +
facet_wrap(vars(cat1), ncol = 1, strip.position = "right") +
labs(x="MP") + labs(y="GT")
我希望图形看起来像使用geom_density时的效果。我能做些什么?这可能吗?
英文:
I recently started learning R and ran into a problem using a custom function when plotting.
I want to use the rosin-rammler equation but can't figure out how to use it in my case. In Mathkad, this was easily solved. And here I can not understand.
This is an example of my data and code.
xy | yy | cat1 | sem1 |
---|---|---|---|
0 | 0 | 0 | №1 |
10 | 3 | 0 | №1 |
20 | 30 | 0 | №1 |
30 | 18 | 0 | №1 |
40 | 15 | 0 | №1 |
50 | 13 | 0 | №1 |
60 | 8 | 0 | №1 |
70 | 5 | 0 | №1 |
80 | 3 | 0 | №1 |
90 | 2 | 0 | №1 |
100 | 0 | 0 | №1 |
110 | 0 | 0 | №1 |
ggplot(allOnw, aes(x = xy, y=yy, col = sem1)) +geom_point()+
guides(fill = FALSE) + labs(col="S" )+theme(legend.position="bottom") +scale_x_continuous(breaks = seq(from = 0, to = 160, by = 10), limits = c(0,160))+
scale_color_manual(values = c("blue", "cyan", "darkgreen","darkorange","gold","darkorchid")) +
facet_wrap(vars(cat1),ncol = 1, strip.position = "right")+labs(x ="MP")+labs(y = "GT ")
I would like the graph to end up looking like when using geom_density.
What can i do for this?
Is it possible?
答案1
得分: 0
如果您要拟合特定模型到您的数据点,您可以在geom_smooth
内部使用method = nls
。
据我从文献了解,您尝试拟合的函数具有以下形式:
rosin_rammler <- function(x, A, B, C) {
C * ((A / x) * (x / B)^A * exp(-((x / B)^(A - 1)))
}
我们可以直接在geom_smooth
内使用这个函数:
ggplot(allOnw, aes(x = xy + 1e-6, y = yy, col = sem1)) +
geom_point() +
geom_smooth(formula = y ~ rosin_rammler(x, A, B, C), method = nls,
method.args = list(algorithm = "port",
start = list(A = 5, B = 20, C = 1000),
lower = c(1, 1)), se = FALSE, n = 1000) +
labs(col = "S", x = "MP", y = "GT")+
theme(legend.position = "bottom") +
scale_x_continuous(breaks = 0:16 * 10, limits = c(0, 160)) +
scale_color_manual(values = c("blue", "cyan", "darkgreen",
"darkorange", "gold", "darkorchid")) +
facet_wrap(vars(cat1), ncol = 1, strip.position = "right")
英文:
If you have a particular model to fit to your points, you can use method = nls
inside geom_smooth
.
As far as I can tell from the literature, the function you are trying to fit takes this form:
rosin_rammler <- function(x, A, B, C) {
C * ((A / x) * (x / B)^A * exp(-((x / B)^(A - 1))))
}
And we can use this directly inside geom_smooth
:
ggplot(allOnw, aes(x = xy + 1e-6, y = yy, col = sem1)) +
geom_point() +
geom_smooth(formula = y ~ rosin_rammler(x, A, B, C), method = nls,
method.args = list(algorithm = "port",
start = list(A = 5, B = 20, C = 1000),
lower = c(1, 1)), se = FALSE, n = 1000) +
labs(col = "S", x = "MP", y = "GT")+
theme(legend.position = "bottom") +
scale_x_continuous(breaks = 0:16 * 10, limits = c(0, 160)) +
scale_color_manual(values = c("blue", "cyan", "darkgreen",
"darkorange", "gold", "darkorchid")) +
facet_wrap(vars(cat1), ncol = 1, strip.position = "right")
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论