2

我想创建一个带有降序条的条形图,在下面的图中,由于 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)

条形图

4

1 回答 1

2

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

在以下示例中,我添加的唯一内容是a12$a1[is.na(a1)] <- "null". 此行检测其中NA的位置a12$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)

在此处输入图像描述

于 2017-12-26T13:55:16.903 回答