Issue with “na” in arranging the bars in a bar plot in R and ggplot2

心不动则不痛 提交于 2019-12-12 06:38:33

问题


I am trying to create a Descending bars bar plot using ggplot2 and plotly in R. The data I am using is "a12" which is consumed by the ggplot under the line "#Final Data frame is consumed below".

If you see the snap shot below, the "na" value in the column "a1" should come at second spot in the plot, however it does not follow the descending order and is pushed at the last.

One way to cure this issue is to hardcode the value there, but I don't want to do that. Instead is there a way using which I can make "na" follow the order without hard coding any value?

Note: Please do not modify the data above the line "#Final Data frame is consumed below". The actual data I am working on is actually in the same format. Please help.

a1 = c("A","","B","C","D","F")
b1 = c(165,154,134,110,94,78)
a12 = data.frame(a1,b1)
a12[2, 1] = "NA"

#Final Data frame is consumed below
pp1 <<- ggplot(a12 , 
               aes(x = reorder(a1, -b1), 
                   y = b1,
                   text = paste("User: <br>", a1, "<br> Days: <br>", round(b1)))) + 
  geom_bar(stat = "identity", fill = "#3399ff" ) + 
  scale_y_continuous(name = "Time") + 
  scale_x_discrete(name = "Employee") 

ggplotly(pp1, tooltip="text", height = 392)

Addon Script below:

a1 = c("A",NA,"B","C","D","F")
b1 = c(165,154,134,110,94,78)
a12 = data.frame(a1,b1,stringsAsFactors = FALSE)
pp1 <<- ggplot(a12 , aes(x = reorder(a1,-b1), y = b1,text=paste("User: 
<br>",a1, "<br> Days: <br>", round(b1)))) + 
geom_bar(stat = "identity", fill = "#3399ff" ) + scale_y_continuous(name 
="Time") + scale_x_discrete(name ="Employee") 
ggplotly(pp1, tooltip="text",height = 392)


回答1:


In order to arrange the bars in the way you want, there should not be a missing value, i.e. NA, in df$a1. We somehow need to replace that missing value.

Since you asked for "no replacement, no modification to the data" in the comments above, I suggest you replace the missing values inside the call to ggplot using, e.g. tidyr::replace_na. This will leave your original data unchanged.

library(tidyr)
library(ggplot2)
pp1 <<- ggplot(data = replace_na(a12, replace = list(a1 = "NA")),
                      aes(x = reorder(a1, -b1),
                          y = b1,
                          text = paste("User: <br>", a1, "<br> Days: <br>", round(b1)))) +
  geom_bar(stat = "identity", fill = "#3399ff") +
  scale_y_continuous(name = "Time") +
  scale_x_discrete(name = "Employee")

ggplotly(pp1, tooltip = "text",height = 392)

I hope this helps.



来源:https://stackoverflow.com/questions/47950817/issue-with-na-in-arranging-the-bars-in-a-bar-plot-in-r-and-ggplot2

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!