如何将ggplot中ObamaCare变量的连续图例改为二元分类图例?
解决方法
问题出在你的ObamaCare变量是数值型(0/1),ggplot默认将其视为连续变量,所以图例显示的是连续颜色刻度而非二元分类。只需把它转换成带标签的因子变量,就能得到你想要的二元图例。
方法1:先处理数据(推荐,后续复用变量更方便)
# 将ObamaCare转为因子,指定水平和对应标签 incumb$ObamaCare <- factor( incumb$ObamaCare, levels = c(0, 1), # 原变量的取值 labels = c("Voted No", "Voted Yes") # 对应显示的标签 ) # 正常绘图即可 ggplot(incumb, aes(ObamaVote, VoteShare, color=ObamaCare)) + geom_point() + theme_dark() + xlab("Member's District Vote for Obama in 2008 (%)") + ylab("Member's Vote Share in 2010 (%)") + ggtitle("Member's District Vote for Obama in 2008 and Vote Share in 2010") + geom_smooth(method='lm')
方法2:在ggplot内直接转换(不修改原数据)
如果不想改动原始数据集,可以在aes里直接把变量转成因子:
ggplot(incumb, aes(ObamaVote, VoteShare, color = factor(ObamaCare, levels = c(0,1), labels = c("Voted No", "Voted Yes")))) + geom_point() + theme_dark() + xlab("Member's District Vote for Obama in 2008 (%)") + ylab("Member's Vote Share in 2010 (%)") + ggtitle("Member's District Vote for Obama in 2008 and Vote Share in 2010") + geom_smooth(method='lm') + # 可选:给图例添加更清晰的标题 labs(color = "Obama Care Vote")
两种方法都能让图例显示成Voted No和Voted Yes两个选项,同时geom_smooth也会自动按二元分类拟合两条回归线,符合你的需求。
内容的提问来源于stack exchange,提问作者stolzt
相关产品推荐
相关产品推荐

