R语言ggplot绘图颜色与指定值不符的问题求助
解决ggplot美学属性不生效的问题
嘿,作为R新手碰到这个问题太正常啦!我来给你拆解一下原因和解决办法:
问题根源
你把color="black"、size=1这类固定样式值放在了aes()函数里——但aes()的作用是把数据变量映射到美学属性,不是用来设置固定样式的。当你在aes()里写color="black"时,ggplot会把"black"当成一个分类变量的取值,自动给它分配默认调色板里的颜色(就是你看到的红、蓝、绿),size=1同理,它会被当成变量映射,不会直接生效成固定尺寸。
快速解决办法
把固定的color和size参数从aes()里移出来,作为图层函数(比如geom_segment()、geom_point())的直接参数,这样ggplot就会把它们当成固定样式应用:
worst_death <- df_clean %>% group_by(event_cat) %>% summarise(Deaths = sum(FATALITIES), Injuries = sum(INJURIES)) %>% ggplot() + # color移到aes外,作为固定属性 geom_segment(aes(x=reorder(event_cat, Injuries), xend=reorder(event_cat, Injuries), y=Deaths, yend=Injuries), color="black") + # size和color都移到aes外 geom_point(aes(x=reorder(event_cat, Injuries), y=Deaths), color="yellow", size=1) + geom_point(aes(x=reorder(event_cat, Injuries), y=Injuries), color="white", size=1) + coord_flip() + theme_ipsum() + theme(legend.position = "none") + xlab("Event Type") + ylab("Human Impact") worst_death
额外小技巧(如果需要图例的话)
要是以后你想保留图例,同时手动指定对应颜色,可以用scale_color_manual()来绑定映射名称和颜色值,比如:
worst_death <- df_clean %>% group_by(event_cat) %>% summarise(Deaths = sum(FATALITIES), Injuries = sum(INJURIES)) %>% ggplot() + # 给每个元素定义映射名称 geom_segment(aes(x=reorder(event_cat, Injuries), xend=reorder(event_cat, Injuries), y=Deaths, yend=Injuries, color="Segment")) + geom_point(aes(x=reorder(event_cat, Injuries), y=Deaths, color="Deaths"), size=1) + geom_point(aes(x=reorder(event_cat, Injuries), y=Injuries, color="Injuries"), size=1) + coord_flip() + theme_ipsum() + theme(legend.position = "right") + xlab("Event Type") + ylab("Human Impact") + # 手动指定每个映射名称对应的颜色 scale_color_manual(values = c("Segment" = "black", "Deaths" = "yellow", "Injuries" = "white"))
内容的提问来源于stack exchange,提问作者aStarIsCorn
相关产品推荐
相关产品推荐

