奇怪的ggplot2错误:空栅格

时间:2014-04-11 04:27:16

标签: r ggplot2

为什么

ggplot(data.frame(x=c(1,2),y=c(1,2),z=c(1.5,1.5)),aes(x=x,y=y,color=z)) +
geom_point()

给我错误

  

grid.Call.graphics中的错误(L_raster,x $ raster,x $ x,x $ y,x $ width,x $ height,:空栅格

但以下两个图表工作

ggplot(data.frame(x=c(1,2),y=c(1,2),z=c(2.5,2.5)),aes(x=x,y=y,color=z)) +
geom_point()
ggplot(data.frame(x=c(1,2),y=c(1,2),z=c(1.5,2.5)),aes(x=x,y=y,color=z)) +
geom_point()

我正在使用ggplot2 0.9.3.1

3 个答案:

答案 0 :(得分:7)

  

TL; DR :检查您的数据 - 您真的想要使用只有一个可能的颜色值的连续色标吗?

如果将+ scale_fill_continuous(guide=FALSE)添加到绘图中,则不会发生错误。 (这会关闭传说。)

ggplot(data.frame(x=c(1,2), y=c(1,2), z=c(1.5,1.5)), aes(x=x,y=y,color=z)) +
  geom_point() + scale_color_continuous(guide = FALSE)

在连续色标仅使用一种颜色的情况下,似乎会触发错误。当前的GitHub版本已包含相关的pull request。通过以下方式安装:

devtools::install_github("hadley/ggplot2")

但更可能的是数据存在问题:为什么你会使用只有一个值的连续色标?

答案 1 :(得分:4)

同样的行为(即“空光栅”错误)在我看来除了1.5之外还有另一个值。

尝试以下方法:

ggplot(data.frame(x=c(1,2),y=c(1,2),z=c(0.02,0.02)),aes(x=x,y=y,color=z))
+ geom_point()

你再次得到同样的错误(尝试使用0.9.3.1和1.0.0.0版本)所以它看起来像一个讨厌和奇怪的错误。

答案 2 :(得分:0)

这听起来像是一个更适合错误报告的边缘案例,正如其他人所提到的那样,但这里有一些可推广的代码,可能对某人有用,作为笨重的解决方法或处理标签/颜色。它绘制了一个重新缩放的变量并使用实际值作为标签。

require(scales)
z <- c(1.5,1.5)
# rescale z to 0:1
z_rescaled <- rescale(z)
# customizable number of breaks in the legend
max_breaks_cnt <- 5
# break z and z_rescaled by quantiles determined by number of maximum breaks 
#  and use 'unique' to remove duplicate breaks
breaks_z <- unique(as.vector(quantile(z, seq(0,1,by=1/max_breaks_cnt))))
breaks_z_rescaled <- unique(as.vector(quantile(z_rescaled, seq(0,1,by=1/max_breaks_cnt))))
# make a color palette
Pal <- colorRampPalette(c('yellow','orange','red'))(500)
# plot z_rescaled with breaks_z used as labels
ggplot(data.frame(x=c(1,2),y=c(1,2),z_rescaled),aes(x=x,y=y,color=z_rescaled)) +
  geom_point() + scale_colour_gradientn("z",colours=Pal,labels = breaks_z,breaks=breaks_z_rescaled)

这是非常偏离主题但我喜欢使用重新缩放来将大量变化的变量发送到这样的函数:

colorfunction <- gradient_n_pal(colours = colorRampPalette(c('yellow','orange','red'))(500),
                            values = c(0:1), space = "Lab")
colorfunction(z_rescaled)
相关问题