geom_smooth()生成多条拟合线问题:如何绘制单条全局拟合线
解决ggplot中geom_smooth绘制多条拟合线的问题
嘿,我完全懂你遇到的麻烦——你想要一条全局的拟合线,但现在每个大洲都对应一条,这是因为你把shape = continent和color = year放在了全局的aes()映射里,ggplot会自动把这些离散变量当成分组依据,所以geom_smooth()会按分组分别拟合线条。
这里有两种简单的解决方法:
方法1:将点的美学映射移到geom_point内部
把只针对散点的shape和color映射从全局aes()里挪到geom_point()的aes()中,这样全局的美学映射只有x和y,geom_smooth()就会用全部数据拟合一条线:
plot1 <- ggplot(gapminder) + aes(y = lifeExp, x = gdpPercap) + # 仅保留全局的x、y映射 labs(y = "Life Expectancy") + guides(color = "none") + geom_point(aes(shape = continent, color = year)) + # 把点的样式映射放在这里 scale_x_log10() plot1 + geom_smooth()
方法2:在geom_smooth中强制指定分组
如果你不想改动原来的plot1代码,可以在geom_smooth()里加上aes(group = 1),强制让ggplot把所有数据当成一个组来拟合:
# 用你原本的plot1代码 plot1 <- ggplot(gapminder) + aes(y = lifeExp, x = gdpPercap, shape = continent, color = year) + labs(y = "Life Expectancy") + guides(color = "none") + geom_point() + scale_x_log10() # 添加geom_smooth时指定分组 plot1 + geom_smooth(aes(group = 1))
两种方法都能得到你想要的单条全局拟合线,选哪种都可以~
内容的提问来源于stack exchange,提问作者Scott Hebert
相关产品推荐
相关产品推荐

