r - ggplot 上 geom_point 和 geom_smooth 的不同色阶
问题描述
我正在尝试绘制观察结果及其分组回归线ggplot
,如下所示:
ggplot(df, aes(x = cabpol.e, y = pred.vote_share, color = coalshare)) +
geom_point() +
scale_color_gradient2(midpoint = 50, low="blue", mid="green", high="red") +
geom_smooth(aes(x = cabpol.e, y = pred.vote_share, group=coalshare1, fill = coalshare1), se = FALSE, method='lm') +
scale_fill_manual(values = c(Junior="blue", Medium="green", Senior="red"))
问题是来自的线条geom_smooth
都是相同的颜色。我尝试使用scale_fill_manual
以便没有两种不同的色标,并手动确定每个组对应的颜色。但相反,所有线条都显示为蓝色。如何使每条线具有不同的颜色?
根据要求,这是一组具有相同问题的可复制数据:
set.seed(1000)
dff <- data.frame(x=rnorm(100, 0, 1),
y=rnorm(100, 1, 2),
z=seq(1, 100, 1),
g=rep(c("A", "B"), 50))
ggplot(dff, aes(x = x, y = y, color = z, group = g, fill = g)) +
geom_point() +
scale_color_gradient2(midpoint = 50, low="blue", high="red") +
geom_smooth(se = FALSE, method='lm')
解决方案
我对这个问题的解决方案是创建多个 geom_smooth 调用,并且每次都将数据子集化为所需的因子水平。这样,您就可以将不同的颜色传递给 geom_smooth 的每个调用。只要你没有很多因素,这个解决方案并不是非常低效的。
dff <- data.frame(x=rnorm(100, 0, 1),
y=rnorm(100, 1, 2),
z=seq(1, 100, 1),
g=rep(c("A", "B"), 50))
ggplot(dff, aes(x = x, y = y,
color = z,
group = g)) +
geom_point() +
scale_color_gradient2(midpoint = 50, low="blue", high="red") +
geom_smooth(
aes(x = x, y =y),
color = "red",
method = "lm",
data = filter(dff, g == "A"),
se = FALSE
) +
geom_smooth(
aes(x = x, y =y),
color = "blue",
method = "lm",
data = filter(dff, g == "B"),
se = FALSE
)
推荐阅读
- rest-assured - 如何在放心中发布嵌套的json
- r - 在具有许多列的数据集中传播单个变量/列,聚合其他变量
- sql - 如何在 PLSQL 中过滤 json?
- html - 添加 :hover 到内容属性
- c# - 如何找到从通用接口派生的非通用接口?
- python - 如何使用自定义参数保存/加载 tensorflow 2.3.1 序列化模型(DoubleDuelingDQN Agent)?
- amazon-web-services - CloudWatch 成本 - 数据处理
- javascript - 如何在反应中将段落中存在的双“OO”字变成绿色方块?例如 clooney - cl[绿色方块]ey
- innodb - 一个 galera 节点出现故障并开始将错误 innodb 报告为未知或不受支持的引擎
- tensorflow - ValueError:找不到内置操作码“RESIZE_BILINEAR”版本“3”的操作注册失败