问题描述
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()
所有红色仍以不可见的透明/白色绘制。我能够将鼠标悬停在不可见的数据上,并查看有关它的信息,以确认它已被绘制(请参见下图)。此外,图例中的范围旁边会出现一个绿色,黄色和橙色的点,而图例中没有预期的红色点。
如果我将上面的代码调整为包括以下三个范围,则所有颜色均按预期显示:
p = ggplot(MobileOutput,Inf]" = "red4"))
gPlotly <- ggplotly()
如果我添加一个单独的范围,则如第一幅图像所示,列出的第三项之外的所有内容都将再次变得完全不可见。
我可以调整一些东西来使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