我正在绘制多个条形图以比较此类型数据中的值,这是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
是否无法用单个条形图?有什么想法吗?
答案 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))