如何为ggplot2的geom_point()指定颜色、图例顺序及解决点形状问题
解决ggplot2自定义颜色、图例顺序及shape报错问题
一、自定义颜色与调整图例顺序
你之前的错误是把scale_color_manual()放在了geom_point()的aes()参数内部——aes()仅用于映射数据列到美学属性,而scale类函数是独立的图层配置项,需要放在ggplot链条的外层。同时要调整图例顺序,有两种可行方案:
方案1:将z转为有序因子(修改原数据)
先把分类变量z转为指定顺序的有序因子,ggplot会自动沿用这个顺序生成图例:
# 转换z为有序因子,指定顺序为Good>Okay>Poor>Bad df$z <- factor(df$z, levels = c("Good", "Okay", "Poor", "Bad"), ordered = TRUE) # 绘图代码 df %>% ggplot(aes(y, x))+ geom_point(aes(color = z))+ # 不需要size=NULL,不映射size直接省略该参数 scale_color_manual(values = c( "Good" = "green", "Okay" = "blue", "Poor" = "black", "Bad" = "red" ))+ geom_smooth(method = lm, se = FALSE)+ labs(x = "Coded Value", y = "Percent", title = "Effects of Change")+ theme_minimal()
方案2:在scale_color_manual中指定breaks(不修改原数据)
如果不想改动原数据,直接在scale_color_manual()里用breaks参数指定图例的显示顺序:
df %>% ggplot(aes(y, x))+ geom_point(aes(color = z))+ scale_color_manual( values = c("Good" = "green", "Okay" = "blue", "Poor" = "black", "Bad" = "red"), breaks = c("Good", "Okay", "Poor", "Bad") # 强制指定图例顺序 )+ geom_smooth(method = lm, se = FALSE)+ labs(x = "Coded Value", y = "Percent", title = "Effects of Change")+ theme_minimal()
二、解决shape=16的报错问题
报错Error: A continuous variable can not be mapped to shape的原因是你误将shape=16放在了aes()内部(当成了数据映射),或者错误地把shape映射到了连续变量。正确的用法分两种情况:
情况1:给所有点设置固定形状16
如果要统一使用形状16,把shape=16放在aes()外面,作为geom_point()的全局参数:
geom_point(aes(color = z), shape = 16)
情况2:将shape映射到离散变量
如果需要根据某个离散变量(比如z)设置不同形状,确保映射的变量是离散类型(因子或字符),放在aes()内部:
geom_point(aes(color = z, shape = z)) # z是离散分类变量,可正常映射
注意:shape美学属性仅支持离散变量映射,不能映射连续变量(比如x、y这类数值型列)。
内容的提问来源于stack exchange,提问作者Tathagato
相关产品推荐
相关产品推荐

