ggplot2 在条形图中绘制单个值

ggplot2 plotting a single value in a bar graph

我正在绘制多个条形图来比较此类数据中的值这是 df4 的内容,其中 time_step 和 disturbance_type 的组合将是唯一的。我正在为数据 qaqc 做这个,这是我拥有的数据的一小部分。

time_step   disturbance_type_id variable    value
1   1   difference  8.040223e+01
10  1   difference  5.520571e+01
11  1   difference  2.145634e+02
12  1   difference  7.351697e+01
13  1   difference  6.682899e+00
14  1   difference  4.242542e+01
15  1   difference  2.102968e+01
16  1   difference  3.772944e+01
17  1   difference  6.365049e+01
1   2   difference  6.365049e+01

我用来绘制它的代码是

differencePlot <- function(distTypeID)
{
  p<-ggplot(data=df4[df4[2]==distTypeID,], aes(x=time_step, y=value, fill=value)) +
    geom_bar(position="dodge",stat="identity") +
    ylab("percent difference in disturbance area") +
    ggtitle(paste("disturbance type ", distTypeID))  

  ggsave(filename=paste("disturbancesByTimeStepAndProject\", "disturbance_area_differences_", distTypeID, ".png", sep=""), plot=p )
}

lapply(unique(df4$disturbance_type_id), function(x) differencePlot(x))

所以我实质上是为每个扰动的唯一类型 ID 创建 1 个条形图文件。当调用函数时,给定的 disturbance_type_id 中存在多行时间步长,一切都很好,但是当使用 distTypeID = 2 调用函数时(只有一行数据存在),函数失败带有此错误消息。

 Error in grid.Call.graphics(L_raster, x$raster, x$x, x$y, x$width, x$height,  : 
   Empty raster 

难道不能用一根柱子作图吗?有什么想法吗?

这个appears to be a known bug in ggplot2。您可以通过在检查单行数据的函数中创建一个 if ... else 语句来解决这个问题。在这种情况下,您会希望您的代码将条形颜色设置在 aes 之外。例如:

p <- ggplot(data=df4[df4[2]==distTypeID,], aes(x=time_step, y=value)) +
       geom_bar(position="dodge",stat="identity", fill="blue") +
       ylab("percent difference in disturbance area") +
       ggtitle(paste("disturbance type ", distTypeID))