【问题标题】:include ggmap using knitr使用 knitr 包含 ggmap
【发布时间】:2013-05-28 06:36:16
【问题描述】:

我正在尝试使用 knitr 中的 ggmap 库包含地图:

library(ggmap)
murder = subset(crime, offense='murder')
qmplot(lon, lat, data=murder)

它在 knitr 之外运行良好,但是当我尝试在 knitr 中运行此代码块时,出现错误:

UseMethod("depth") 中的错误:没有适用于 'depth' 的方法应用于“NULL”类的对象

而且最终的 PDF 中没有地图

我尝试将 qmplot 行包裹在 evaluate(...) 中,但这不起作用


库的输出(knitr);会话信息()

> library(knitr)
> sessionInfo()
version 3.0.1 (2013-05-16)
Platform: i686-redhat-linux-gnu (32-bit)

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

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

other attached packages:
[1] knitr_1.2      vimcom_0.9-8   setwidth_1.0-3

loaded via a namespace (and not attached):
[1] digest_0.6.3   evaluate_0.4.3 formatR_0.7    stringr_0.6.2  tools_3.0.1  

我还尝试通过 Rscript(即不在 VIM 中)运行相同的代码:

Rscript -e "library(knitr); knit('map.Rnw')"

我得到一个类似的错误:

Error in UseMethod("depth") : 
no applicable method for 'depth' applied to an object of class "NULL"
Calls: knit ... grid.draw -> grid.draw.gTableChild -> upViewport -> depth

使用 ggmap v 2.3 和 ggplot v 0.9.3.1

【问题讨论】:

  • 我无法重现该问题。请发帖library(knitr); sessionInfo()
  • ggmapv2.3?这很奇怪;我的环境和你几乎一模一样,但还是无法重现问题

标签: r knitr ggmap


【解决方案1】:

我发现了问题:我使用 tikz 设备将地图包含在我的最终文档中。该 tikz 设备似乎不适用于地图(或至少较大的地图)。

当我将设备更改为 pdf 或 png 时,地图已毫无问题地包含在我的文档中。

【讨论】:

  • tikz 不工作的任何原因?我真的很喜欢。
【解决方案2】:

在调用长 ggplot 命令时遇到此错误 (R3.4.1),并在大型数据帧 (28x32000) 上附加了许多附加命令

ggplot(z, aes(x=T,y=A,fill=F), title="D") + geom_bar(aes(fill=F), stat ="identity", position="dodge",  colour="black") + facet_grid(P~T,scales='free_x',space='free_x')
+ theme(strip.text.y = element_text(angle = 0), axis.text.x = element_text(angle = 270)) + guides(col=guide_legend(ncol=1))

分离命令解决了这个问题,并且可以说提高了可读性:

z2 <- ggplot(z, aes(x=T,y=A,fill=F), title="D")
z2 <- z2 + geom_bar(aes(fill=F), stat ="identity", position="dodge",  colour="black")
z2 <- z2 + facet_grid(P~T,scales='free_x',space='free_x')
z2 <- z2 + theme(strip.text.y = element_text(angle = 0), axis.text.x = element_text(angle = 270))
z2 <- z2 + guides(col=guide_legend(ncol=1))
z2

想知道这是否是与(命令大小)*(对象大小)相关的更一般的错误?

编辑:在 调整绘图窗口大小 时,在 ggplot2 的较小命令上重新发现了此错误 - 可能是更大、时间密集的任务更有可能以这种方式中断 - 或者再次,可能是内存问题。

【讨论】:

    猜你喜欢
    • 2012-06-25
    • 2013-08-20
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-15
    • 1970-01-01
    相关资源
    最近更新 更多