试图在ggplot中添加非线性正趋势线

时间:2018-03-29 16:57:17

标签: r ggplot2 transform

我目前正在尝试根据变量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))

我非常感谢有关此事的任何帮助。感谢您的时间。

1 个答案:

答案 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. 您在[{1}}中不需要data=species,因为您已经在主ggplot调用中提供了geom_smooth

  2. 在你的主要ggplot调用中你有x = BodyMass和y = MaleHornLength,但在data=species你有x = loglength和y = logbody。我无法查看您的数据,因此我无法确定,但这并未反转geom_smoothgeom_point之间的x和y轴映射?

  3. 再一次,我无法确定没有看到您的数据,但绘制未进行对数转换的点然后覆盖基于回归曲线的 的数据是否有意义em> log转换?此外,记录变换数据和轴似乎很奇怪。