似乎 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))
代码在我的电脑上测试过。以下是
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 4.2.3(amd64 架构、OpenBSD)上重现您的结果(即“空白”图),而不会出现任何警告或错误消息。
这可能是
grDevices
的限制。如果我使用 ggsave(file = '/tmp/foo.png')
将绘图保存到 PNG 文件,我会得到一个包含绘图的图像文件。另一方面,当使用 png()
或 Cairo()
(来自 Cairo
包)时,我也会得到一个带有“空白”图的 PNG 文件。