ggplot排序顺序处理NA值

时间:2018-02-18 15:21:00

标签: r sorting ggplot2 na

我的目标是创建服务请求的散点图 X轴将是请求的日期 X值将显示从最旧到最新,从左到右的日期 Y轴将显示分配给请求的优先级 我希望将Y值从最高优先级(即1)排到最低 尚未优先排序的请求在该列中具有NA。

这是一个示例数据集(注意 - 原始数据文件id选项卡 - 在下面显示“NA”的位置没有值分隔,为清楚起见):

ID  Priority    DateCreated  
549 NA  2018-02-15  
548 NA  2018-02-15  
547 3   2018-02-13  
537 1   2018-01-17  
536 5   2018-01-17  
518 NA  2017-12-21  
509 3   2017-11-27  
500 2   2017-11-16  
486 NA  2017-10-04  
477 3   2017-08-08  
475 1   2017-09-14  
448 2   2017-07-21  
444 5   2017-07-14  
431 5   2017-06-30  
425 1   2017-06-21  
407 2   2017-05-26  
395 4   2017-05-09  
394 4   2017-05-09  
374 4   2017-04-27  
368 2   2017-04-21  
352 NA  2017-04-03  
328 4   2017-02-28  
308 NA  2017-02-28  
272 2   2016-10-05  
213 4   2016-05-19  
212 5   2016-05-19  
200 2   2016-04-26  
188 NA  2016-03-17  

加载ggplot2和data.frame后,我用这段代码创建了图:

bl <- fread("backlog.txt")  
bl$DateCreated <- as.Date(bl$DateCreated, "%Y-%m-%d")  
bl$Priority <- as.integer(bl$Priority)  
ggplot(bl, aes(x = DateCreated, y = reorder(Priority, -Priority))) +  
 geom_text((aes(label = ID)))

如果您重现此图,您将看到优先级为NA的项目显示在顶部。为了向我的客户展示,如果它们出现在底部则更清楚 我想我可以用一个“神奇的数字”(例如11)代替那些NAs,但我更喜欢一种不那么笨拙的解决方案。
有人已经处理过类似的问题吗?

感谢。

1 个答案:

答案 0 :(得分:3)

这也是一种解决方法,但我认为比设置一个魔术数字更容易接受

bl$DateCreated <- as.Date(bl$DateCreated, "%Y-%m-%d") 
bl$Priority[is.na(bl$Priority)] <- "No Data Available"
bl$Priority <- factor(bl$Priority,levels=c("No Data Available","1","2","3","4","5"))
ggplot(bl, aes(x = DateCreated, y = Priority)) +  geom_text((aes(label = ID)))

https://stackblitz.com/edit/angular-rhioqt?file=app%2Fevent.service.ts