r - 如何在 R 中为 ggplot 添加图例?
问题描述
我在 R 中使用带有 3 个变量的数据框。我想根据第三个变量(AmtX)将(ggplot)2个变量(CMod4X和CMod5X)绘制为两条不同的线。最后,我成功地创建了某种适合我的图表,但我没有包含图例。我已经在这里咨询了其他一些线索,但答案似乎对我不起作用。
(人工)数据集如下所示
AmtX <- seq(from = 1, to = 10001, by = 50)
CMod4X <- rnorm(201, mean = 0.87, sd = 0.01)
CMod5X <- rnorm(201, mean = 0.84, sd = 0.01)
EvalAmtX <- as.data.frame(cbind(AmtX,CMod4X,CMod5X))
我做了这样的情节
pltX <- ggplot(data = EvalAmtX, aes (x = AmtX)) +
geom_line(aes(y = CMod4X), color = "red", show.legend = TRUE) +
geom_line(aes(y = CMod5X), color = "blue", show.legend = TRUE) +
geom_smooth(aes(y = CMod4X), color = "red", se = FALSE, show.legend = TRUE) +
geom_smooth(aes(y = CMod5X), color = "blue", se = FALSE, show.legend = TRUE) +
labs(y = "C-index", x = "Amount (Tau)", title = "model 4 and model 5") +
scale_colour_manual(name = "Models", values = c("CMod4" = "red", "CMod5" = "blue"))
pltX
但是这个情节不会包含标签。我在下面包含了我的情节:
我做错了什么,我必须做什么才能获得一个告诉我红线是 CMod4 而蓝线是 CMod5 的情节?
谢谢你的帮助!!伦纳德
解决方案
我想您需要更深入地了解其ggplot2
工作原理,因为您的问题与数据框的基本设置有关。关于这个主题有很多很棒的资源,例如这个。无论如何,这里有两种将图例放入图表的解决方案。
解决方案 1:将数据帧重新排列为长格式
library(reshape2)
df <- melt(data = EvalAmtX, id.vars = "AmtX")
数据框现在如下所示:
head(df)
# AmtX variable value
# 1 1 CMod4X 0.8772716
# 2 51 CMod4X 0.8524197
# 3 101 CMod4X 0.8686019
# 4 151 CMod4X 0.8638835
# 5 201 CMod4X 0.8674627
# 6 251 CMod4X 0.8729925
现在,绘图很容易。无需告诉ggplot2
每条线的颜色,您只需向其提供数据框中的哪一列包含应确定线颜色的因素的信息。因此,您添加了另一种美学 ( col = variable
)。这也会自动添加颜色图例。
ggplot(df, aes(x=AmtX, y=value, col = variable)) +
geom_line()
解决方案 2:使用手动色标
你几乎在你的代码中得到了它。
pltX <- ggplot(data = EvalAmtX, aes (x = AmtX)) +
geom_line(aes(y = CMod4X, color = "CMod4")) +
geom_line(aes(y = CMod5X, color = "CMod5")) +
geom_smooth(aes(y = CMod4X, color = "CMod4"), se = FALSE) +
geom_smooth(aes(y = CMod5X, color = "CMod5"), se = FALSE) +
labs(y = "C-index", x = "Amount (Tau)", title = "model 4 and model 5") +
scale_colour_manual(name = "Models", values = c(CMod4 = "red", CMod5 = "blue"))
pltX
推荐阅读
- python - Scatter plot change plot output when more scatters are added
- python-3.x - 如何使用有条件的增量计数再次循环相同的列表
- django - Django:向用户发送电子邮件
- amazon-web-services - 未处理的拒绝 ServerlessError:发生错误:IamRoleLambdaExecution - 检测到 1 个验证错误
- r - 一天后计算值的平均变化
- python - 如何读取 csv 数据、去除空格/制表符并写入新的 csv 文件?
- c++ - 我是否必须实现所有 4 个运算符重载才能处理所有 const 和非 const 组合?
- html - 在鼠标悬停时更改 SVG 剪贴蒙版的大小
- java - 如何自行部署 Spring Boot 应用程序
- c - 数组如何绕过其声明的长度