如何修改ggplot中回归线的颜色 使其与散点颜色区分
你当前的代码将color='factor(threshold)'写在了ggplot()的全局美学映射中,所有图层默认会继承这个颜色映射规则,因此geom_smooth生成的回归线会和对应分组的散点颜色完全一致,导致辨识度低。
方案1:保留按threshold分组的两条回归线,每条回归线和对应散点颜色区分
如果需要保留分组回归的逻辑,只需要将散点的颜色映射从全局移到geom_point的私有映射中,同时给geom_smooth单独设置分组映射和自定义颜色即可,修改后代码如下:
(ggplot(data=df, mapping=aes(x='score', y='relent')) + geom_point(mapping=aes(color='factor(threshold)')) + scale_color_manual(values=['darkorange', 'purple']) + geom_smooth(method='lm', formula = 'y ~ x+I(x**2)', se=False, mapping=aes(group='factor(threshold)'), color = ['steelblue', 'forestgreen']) + geom_vline(xintercept = 766, color = "red", size = 1, linetype = "dashed") + labs(y = "Yield", x = "Score") + theme_bw() )
你可以根据自己的偏好调整geom_smooth中color参数的颜色值,确保和散点的橙、紫色形成明显区分。
方案2:不需要分组回归,仅生成一条整体回归线
如果只需要展示全量数据的回归趋势,直接给geom_smooth设置固定的单一颜色即可,修改后代码如下:
(ggplot(data=df, mapping=aes(x='score', y='relent')) + geom_point(mapping=aes(color='factor(threshold)')) + scale_color_manual(values=['darkorange', 'purple']) + geom_smooth(method='lm', formula = 'y ~ x+I(x**2)', se=False, color = 'black') + geom_vline(xintercept = 766, color = "red", size = 1, linetype = "dashed") + labs(y = "Yield", x = "Score") + theme_bw() )
核心优化逻辑是仅给需要的图层设置私有美学映射,不要把非公共的映射规则放到全局,就能避免不同图层的样式互相干扰。
内容的提问来源于stack exchange,提问作者rexvirtual
相关产品推荐
相关产品推荐

