ggplot2在条形图中绘制单个值

时间:2015-04-08 20:52:12

标签: r ggplot2

我正在绘制多个条形图以比较此类型数据中的值,这是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 

是否无法用单个条形图?有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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))