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