我目前正在尝试根据变量y和x之间的二次模型向我的对数 - 对数图添加非线性正曲线。即使在尝试更改对数质量(x)后,我也总是收到以下消息。
“警告讯息: 1:删除了包含非有限值的29行(stat_smooth)。 2:
stat_smooth()
中的计算失败: 变量长度不同(找到'(重量)') 3:删除了包含缺失值的29行(geom_point)。“
ggplot(species,aes(x=BodyMass,y= MaleHornLength))+
geom_point()+geom_smooth(mapping = aes(loglength,logbody),
data = species, stat = "smooth",method = "lm",
formula = species$loglength ~ species$logbody +Time8,
se = TRUE, na.rm = FALSE, show.legend = NA, inherit.aes = TRUE)+
scale_x_continuous(trans='log',breaks = c(0,5,10,20,50,100,200,300,500))+
scale_y_continuous(trans='log',breaks = c(0,5,10,20,50,100))+
labs(x="Male Body Mass (kg)", y="Male Horn Length (cm)")+
theme(axis.line = element_line(colour = "black"),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
axis.text=element_text(size=12, colour = "black"),
axis.title=element_text(size=14))
我非常感谢有关此事的任何帮助。感谢您的时间。
答案 0 :(得分:1)
关于警告编号2:formula
中的geom_smooth
参数只能有y
作为LHS变量而x
作为RHS变量。默认值为y ~ x
,但您可以执行此操作,例如y ~ poly(x, 2)
或y ~ splines::bs(x, df=4)
。该公式是通用的,将使用aes
中指定的x和y列。
其他一些事情:
您在[{1}}中不需要data=species
,因为您已经在主ggplot调用中提供了geom_smooth
。
在你的主要ggplot调用中你有x = BodyMass和y = MaleHornLength,但在data=species
你有x = loglength和y = logbody。我无法查看您的数据,因此我无法确定,但这并未反转geom_smooth
和geom_point
之间的x和y轴映射?
再一次,我无法确定没有看到您的数据,但绘制未进行对数转换的点然后覆盖基于回归曲线的 的数据是否有意义em> log转换?此外,记录变换数据和轴似乎很奇怪。