【问题标题】:Issue with "na" in arranging the bars in a bar plot in R and ggplot2在 R 和 ggplot2 的条形图中排列条形时出现“na”问题
【发布时间】:2017-12-23 07:54:59
【问题描述】:

我正在尝试使用 ggplot2 创建一个降序条形图并在 R 中绘制。我使用的数据是“a12”,由 ggplot 在“#Final Data frame is used below”行下使用。

如果您看到下面的快照,“a1”列中的“na”值应该在图中的第二个位置,但是它不遵循降序并被推到最后。

解决此问题的一种方法是将那里的值硬编码,但我不想这样做。相反,有没有一种方法可以让“na”遵循顺序而不用硬编码任何值?

注意:请不要修改“#Final Data frame is used below”行上方的数据。我正在处理的实际数据实际上是相同的格式。请帮忙。

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)

插件脚本如下:

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)

【问题讨论】:

  • 在第三行设置stringsAsFactors = FALSE
  • @markus,谢谢,我也想知道,假设我有一个 1000 行数据,其中多列具有相似的“NA”值,这个命令会处理整个数据吗?跨度>
  • 请将此作为一个新问题,提供一个可重现的示例,就像您在上面所做的那样。
  • 我会解决这个问题的,非常感谢您的帮助,我也遇到了另一个需要您帮助的问题,请查看此链接stackoverflow.com/questions/47951307/…

标签: r ggplot2 plotly geom-bar ggplotly


【解决方案1】:

为了按照您想要的方式排列条形,df$a1 中不应有缺失值,即NA。我们需要以某种方式替换缺失的值。

由于您在上面的 cmets 中要求“不替换,不修改数据”,我建议您使用例如替换对 ggplot 的调用中的缺失值,例如tidyr::replace_na。这将使您的原始数据保持不变。

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)

我希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2016-06-29
    • 2021-01-17
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2016-07-11
    相关资源
    最近更新 更多