在R中以降序排列条形图中带有“null”的条形图

时间:2017-12-26 10:12:42

标签: r ggplot2 dplyr plotly ggplotly

我想创建一个带有降序条形的条形图,在下图中,由于NA出现在“a1”向量中的第二个点,因此在创建图形时最后按下它。但是,我希望NA栏只出现在第二个位置,请在这里帮助我,因为我想在不修改数据的情况下实现此目的。

library(ggplot2)
library(plotly)

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)

bar plot

1 个答案:

答案 0 :(得分:2)

在评论中,您认为硬编码替换NA的值是一种不好的做法。我会说通过索引位置进行硬编码是一个坏主意,但是使用字符串(例如NA)自动替换null是一个好主意。

在以下示例中,我添加的唯一内容是a12$a1[is.na(a1)] <- "null"。此行检测NAa12$a1的位置,并将其替换为null。基于reorder中的数字的b1将在稍后发生,因此此方法不要求您事先知道NA的索引

library(ggplot2)
library(plotly)

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

# Replace the NA to be "null"
a12$a1[is.na(a1)] <- "null"

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)

enter image description here