r - geom_line() 仅使用默认的红色和蓝色,而不是 R ggplot 函数中指定的颜色
问题描述
我正在使用ggplot()
构建两个散点图,分别绘制 (1) 男性和 (2) 女性患者的健康评估评分与治疗 # 周的情况,此外,我还geom_line()
用于绘制男性和女性的回归线叠加图图形。
我的问题:如何将线叠加的颜色与散点图点的颜色(“steelblue2”和“pink3”)相匹配,同时仍保留图例?
我发现如果我移出incolor
中的aes()
参数geom_line()
,线条和散点图点的颜色匹配,但随后图例消失了。
我的代码和来自我的数据的示例:
mean_behav_by_numweeks = data.frame(
numweeks_round = c(1:10),
Mean_Behavior_Score_Male = c(3.32,4.18,3.82,4.06,3.33, 3.80,3.64,3.66,3.37,3.82),
nrow_male = c(396,323,293,259,226,217,202,190,170,167),
lm_results_predict_male = c(3.82,3.80,3.78,3.76,3.74, 3.72,3.70,3.68,3.66,3.64),
Mean_Behavior_Score_Female = c(2.91,3.79,3.65,3.41, 2.88,2.88,3.78,2.98,3.67,3.93),
nrow_female = c(109,82,72,74,66,60,58,56,52,50),
lm_results_predict_female=c(3.44,3.44,3.45,3.45, 3.46,3.47,3.47,3.48,3.48,3.49))
gg_plot1 <- ggplot(mean_behav_by_numweeks,
aes(numweeks_round,
Mean_Behavior_Score_Male,
size = mean_behav_by_numweeks$nrow_male)) +
geom_point(colour='steelblue2') +
ggtitle(paste("Scatter plot of mean behavior assessment score by member by # weeks \n since 1st assessment for",
as.character(var),
"among Male Medi-Cal plan members")) +
theme(plot.title = element_text(size=10.9, hjust = 0.5)) +
theme(axis.text = element_text(size=8)) +
scale_size_continuous(range = c(1, 7)) +
xlab("Number of weeks since 1st assessment") +
ylab("Mean behavior assessment score") +
theme(legend.position="bottom") +
labs(size="# members") +
geom_line(data=mean_behav_by_numweeks,
aes(numweeks_round, lm_results_predict_male, color='steelblue2'),
size=1) +
geom_line(data=mean_behav_by_numweeks,
aes(numweeks_round, lm_results_predict_female, color='pink3'),
size=1) +
scale_color_discrete(name = "GenderCode", labels = c("Female", "Male")) +
theme(legend.position="bottom") +
guides(color = guide_legend(order=1, direction="vertical"))
gg_plot1
gg_plot2 <- ggplot(mean_behav_by_numweeks,
aes(numweeks_round,
Mean_Behavior_Score_Female,
size = mean_behav_by_numweeks$nrow_female)) +
geom_point(colour='pink3') +
ggtitle(paste("Scatter plot of mean behavior assessment score by member by # weeks \n since 1st assessment for",
as.character(var),
"among Female Medi-Cal plan members")) +
theme(plot.title = element_text(size=10.9, hjust = 0.5)) +
theme(axis.text = element_text(size=8)) +
scale_size_continuous(range = c(1, 7)) +
xlab("Number of weeks since 1st assessment") +
ylab("Mean behavior assessment score") +
theme(legend.position="bottom") +
labs(size="# members") +
geom_line(data=mean_behav_by_numweeks,
aes(numweeks_round, lm_results_predict_male, color='steelblue2'),
size=1) +
geom_line(data=mean_behav_by_numweeks,
aes(numweeks_round, lm_results_predict_female, color='pink3'), size=1) +
scale_color_discrete(name = "GenderCode", labels = c("Female", "Male")) +
theme(legend.position="bottom") +
guides(color = guide_legend(order=1, direction="vertical"))
windows()
gg_plot2
解决方案
您将希望将数据重塑为长格式,尽管您不必使用melt
或者gather
如果您不想 - 您可以手动堆叠数据,例如
library(dplyr)
library(ggplot2)
new_df <- bind_rows(
male = select(mean_behav_by_numweeks,
numweeks_round,
Mean_Behavior_Score = Mean_Behavior_Score_Male,
nrow = nrow_male,
lm_results_predict = lm_results_predict_male),
female = select(mean_behav_by_numweeks,
numweeks_round,
Mean_Behavior_Score = Mean_Behavior_Score_Female,
nrow = nrow_female,
lm_results_predict = lm_results_predict_female),
.id = "gender"
)
然后你可以做
ggplot(new_df, aes(numweeks_round, Mean_Behavior_Score, size = nrow, colour = gender)) +
geom_point() +
theme(plot.title = element_text(size=10.9, hjust = 0.5),
axis.text = element_text(size=8),
legend.position="bottom") +
scale_size_continuous(range = c(1, 7)) +
labs(x = "Number of weeks since 1st assessment",
y = "Mean behavior assessment score",
size="# members") +
geom_line(aes(y = lm_results_predict), size = 1) +
scale_color_manual(name = "GenderCode", labels = c("Female", "Male"), values = c("pink3", "steelblue2")) +
guides(color = guide_legend(order=1, direction="vertical")) +
facet_wrap("gender")
这给了你
推荐阅读
- javascript - 如何在 React Form 中实现条件逻辑
- excel - 根据部分文件名将文件移动到各自的文件夹
- regex - 在 Azure Kubernetes 日志中使用正则表达式解析容器 insites
- javascript - Javascript下拉列表没有选项
- flutter - 我正在使用物联网开发 Flutter。无法连接到具有 wifi 的设备并将凭据发送到设备
- azure - CosmosDB gremlin 图:按顶点对顶点和边进行分组
- .net - conhost.exe 似乎在泄漏内存
- android - 离子电容器不会在 App Close 上关闭 cookie
- android - 定位 S+(版本 10000 及更高版本)要求在创建 PendingIntent 时指定 FLAG_IMMUTABLE 或 FLAG_MUTABLE 之一
- node.js - 我遇到了一个非常奇怪的 MongoDB 错误