如何解决在 geom-smooth / ggplot2 / R 中自定义公式
我想像这样自定义 geom_smooth 中使用的公式:
@route('/api/<userid>')
def my_homepage(userid):
if current_user.id != userid:
abort(403,"You can't access that")
但是,由于我使用的变量的长度不同,我收到了计算失败的错误。
library(MASS)
library(ggplot2)
data("Cars93",package = "MASS")
str(Cars93)
Cars93.log <- transform(Cars93,log.price = log(Price))
log.model <- lm(log.price ~ Horsepower*Origin,data = Cars93.log)
summary(log.model)
plot(log.model)
p <- ggplot(data = Cars93.log,aes(x = Horsepower,y = log.price,colour = Origin)) +
geom_point(aes(shape = Origin,color = Origin)) + # Punkte
facet_grid(~ Origin) +
theme(axis.title.x = element_text(margin=margin(15,0)),axis.title.y = element_text(margin=margin(0,15,0))) +
scale_y_continuous(n.breaks = 7) +
scale_colour_manual(values = c("USA" = "red","non-USA" = "black")) +
scale_shape_manual(values = c(16,16)) +
ylab("Price(log)")
lm.mod <- function(df) {
y ~ x*Cars93.log$Origin
}
p_smooth <- by(Cars93.log,Cars93.log$Origin,function(x) geom_smooth(data=x,method = lm,formula = lm.mod(x)))
p + p_smooth
但是当我检查每个变量的长度时,它们都是一样的......任何想法,有什么问题?
非常感谢,玛蒂娜
解决方法
我同意@Rui Barradas 的观点,似乎问题在于 lm.mod
和 p_smooth
以及 by
函数的行
一旦您通过 Origin 进行区分(例如,通过执行 facet_wrap
或 color = Origin
),那么 geom_smooth
将自动为这些方面运行不同的模型。
p <- ggplot(data = Cars93.log,aes(x = Horsepower,y = log.price,color = Origin)) +
geom_point(aes(shape = Origin)) +
facet_wrap(~ Origin) +
theme(axis.title.x = element_text(margin=margin(15,0)),axis.title.y = element_text(margin=margin(0,15,0))) +
scale_y_continuous(n.breaks = 7) +
scale_colour_manual(values = c("USA" = "red","non-USA" = "black")) +
scale_shape_manual(values = c(16,16)) +
ylab("Price(log)")
p + geom_smooth(method = lm,formula = y ~ x)
您可以通过扩展 x 轴范围以查看 geom_smooth 线与 y 轴相交的位置(例如,log.model
)使自己相信这与 + coord_cartesian(xlim = c(0,300))
的输出相同
如果您不将 color = Origin
传递给 geom_smooth
函数,您还可以看到图中的差异(如果您从第一个 ggplot() 初始化中注释掉,基本上会发生什么):
p <- ggplot(data = Cars93.log,y = log.price)) + # color = Origin)) +
geom_point(aes(shape = Origin)) +
#facet_wrap(~ Origin) +
theme(axis.title.x = element_text(margin=margin(15,formula = y ~ x)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。