GGPlot不会显示超过3种颜色

问题描述

GGPlot仅使用以下代码显示前三种颜色(绿色,黄色和橙色):

p = ggplot(MobileOutput,aes(x=`Timestamp(UTC)`,y=`PM2.5(ug/m3)`))+
  geom_point(aes(colour = cut(`PM2.5(ug/m3)`,c(0,12.0,35.4,55.4,150.4,250.4,500,Inf))),size = 0.1) +
  ylim(0,500)  +
  theme_bw() +
  scale_color_manual(name = "PM2.5",values = c("(0,12]" = "green2","(12,35.4]" = "yellow2","(35.4,55.4]" = "orange","(55.4,150.4]" = "red1","(150.4,250.4]" = "red2","(250.4,500]" = "red3","(500,Inf]" = "red4"))
gPlotly <- ggplotly()

所有红色仍以不可见的透明/白色绘制。我能够将鼠标悬停在不可见的数据上,并查看有关它的信息,以确认它已被绘制(请参见下图)。此外,图例中的范围旁边会出现一个绿色,黄色和橙色的点,而图例中没有预期的红色点。

enter image description here

如果我将上面的代码调整为包括以下三个范围,则所有颜色均按预期显示

p = ggplot(MobileOutput,Inf]" = "red4"))
gPlotly <- ggplotly()

enter image description here

如果我添加一个单独的范围,则如第一幅图像所示,列出的第三项之外的所有内容都将再次变得完全不可见。

我可以调整一些东西来使GGPlot支持在图例和绘图中显示超过3种颜色/范围吗?

解决方法

看起来cut()在其标签中舍入了值:在此示例中,断点全部在(x + 0.4),但是较大bin的端点在标签中以整数形式给出(150、250代替150.4、250.4)。这将导致剪切PM2.5向量中的唯一值/级别与比例尺中指定的唯一值/级别不匹配。

 table(cut(rnorm(1000,150,200),breaks=c(0,12.0,35.4,55.4,150.4,250.4,500,Inf)))

 (0,12]   (12,35.4] (35.4,55.4]  (55.4,150]   (150,250]   (250,500] 
     17          31          25         194         199         282 
 (500,Inf] 
     43