geom_raster 不适用于 x 比例中超过 2^15 的值

问题描述 投票:0回答:1

似乎 geom_raster 在我的计算机上无法正常工作,x 轴上的值超过 2^15-1 。我不明白为什么要这样做。我非常确信我过去曾做过这样的图表,但我不知道发生了什么变化(可能在我的计算机上)导致图表现在失败。 请随时提出任何建议并提前致谢。

这是一段代码,它在我这边产生了奇怪的结果。第一个图形失败(但没有错误),第二个图形按预期工作。

library(ggplot2)
df <- expand.grid(y = 0:4, 
                  x = 1:2^(15))
df$fill <- rnorm(2^15)

# Plot 1, failing (return empty ggplot)
ggplot(df) +
  geom_raster(aes(x = x, y = y, fill = fill))

# Plot 2, working as intended
ggplot(df[1:(2^15 - 1),]) +
  geom_raster(aes(x = x, y = y, fill = fill))

图 1 - 不工作

图 2 - 按预期工作

代码在我的电脑上测试过。以下是

sessionInfo()
的输出。我尝试过使用
R
版本和
ggplot2
版本,但没有任何效果。我要求一位同事在他的计算机上测试代码,代码运行顺利(两个图都工作),并且适用于 R 4.2.3 和 4.4.0(但使用 Windows 系统)。我可以通过使用
geom_tile
来规避这个问题,但我更喜欢使用
geom_raster
并理解为什么它不再起作用。任何建议将不胜感激。

R version 4.3.3 (2024-02-29)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 22.04.4 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.10.0 
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.10.0

locale:
 [1] LC_CTYPE=en_GB.UTF-8       LC_NUMERIC=C               LC_TIME=en_GB.UTF-8        LC_COLLATE=en_GB.UTF-8    
 [5] LC_MONETARY=en_GB.UTF-8    LC_MESSAGES=en_GB.UTF-8    LC_PAPER=en_GB.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C       

time zone: Europe/Paris
tzcode source: system (glibc)

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] ggplot2_3.5.1

loaded via a namespace (and not attached):
 [1] labeling_0.4.3    utf8_1.2.4        R6_2.5.1          tidyselect_1.2.1  farver_2.1.1      magrittr_2.0.3   
 [7] gtable_0.3.5      remotes_2.5.0     glue_1.7.0        tibble_3.2.1      pkgconfig_2.0.3   generics_0.1.3   
[13] dplyr_1.1.4       lifecycle_1.0.4   cli_3.6.2         fansi_1.0.6       scales_1.3.0      grid_4.3.3       
[19] vctrs_0.6.5       withr_3.0.0       compiler_4.3.3    rstudioapi_0.16.0 tools_4.3.3       pillar_1.9.0     
[25] munsell_0.5.1     colorspace_2.1-0  rlang_1.1.3      
r ggplot2 geom-raster
1个回答
0
投票

我可以在 R 4.2.3(amd64 架构、OpenBSD)上重现您的结果(即“空白”图),而不会出现任何警告或错误消息。

这可能是

grDevices
的限制。如果我使用
ggsave(file = '/tmp/foo.png')
将绘图保存到 PNG 文件,我会得到一个包含绘图的图像文件。另一方面,当使用
png()
Cairo()
(来自
Cairo
包)时,我也会得到一个带有“空白”图的 PNG 文件。

© www.soinside.com 2019 - 2024. All rights reserved.