GGPlot 返回与我指定的颜色不同的颜色

时间:2020-12-19 12:32:00

标签: r ggplot2 visualization

我对 R 有点陌生 - 在尝试生成以下情节时遇到了一个非常奇怪的问题


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="black")) +
        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

图表运行完美 - 除了颜色和美学选项(大小等)没有返回我指定的内容。

output

奇怪的是颜色是红蓝绿,而不是黄黑白。

有人知道为什么会发生这种情况吗?

谢谢

1 个答案:

答案 0 :(得分:0)

如果没有您的数据,我无法对此进行测试,但以下内容应该对您有用:

worst_death <- df_clean %>%
        group_by(event_cat) %>%
        summarise(Deaths = sum(FATALITIES),
                  Injuries = sum(INJURIES)) %>%
        ggplot(aes(x = reorder(event_cat,Injuries), y = Deaths)) +
        geom_segment(aes(xend = reorder(event_cat,Injuries), 
                         y = Deaths, yend = Injuries)) +
        geom_point(color = "yellow", size = 1) +
        geom_point(aes(y = Injuries), color = "white", size = 1) +
        coord_flip() +
        theme_ipsum() +
        theme(legend.position = "none") +
        xlab("Event Type") +
        ylab("Human Impact")
        
worst_death

有几点需要注意:

  • 当您使用字符串表示颜色 inside aes 时,ggplot 会将其读取为将几何图形分配给标记颜色 分组 的单个因子级别,并且不会将其解释为文字颜色分配。如果您的情节中有一个图例,该键将在红色和蓝色关键点上显示标签“白色”和“黄色”。如果您希望将这些标签解释为文字颜色,您可以将 + scale_color_identity() 添加到您的图中,或者更常见的是,只需将 color = outside 带入 aes,它被解释为实际的颜色分配。如果您不想要图例,这是最简单的方法。
  • 出于同样的原因,您可能也应该将 size = 带出 aes 调用。 ggplot 将数字 1 映射到其默认大小比例,而不是字面上使点大小为 1。
  • geom_segment 默认为黑色,因此不需要指定颜色。
  • 如果在原始 ggplot 调用中包含默认的 x 和 y 美学,则可以节省一些输入(从而降低错误风险并使维护更容易)。这些由任何后续 geom 继承,但可以根据需要覆盖。
  • 在 SO 上发布问题时,请包含数据和代码,否则没有人可以重现您的问题或测试/演示可能的解决方案。在您的情况下执行此操作的最简单方法是将 dput(df_clean) 的输出复制并粘贴到您的问题中。