我想创建一个带有降序条形的条形图,在下图中,由于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)
答案 0 :(得分: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)