在R中合并两幅基础图时遇报错:Error in if (labels) { : missing value...
问题解决:合并小波功率谱图的报错修复
报错原因
你遇到的Error in if (labels) { : missing value where TRUE / FALSE is required,是因为plot_grid函数(来自cowplot包)的labels='AUTO'参数处理问题:旧版cowplot不支持'AUTO'作为labels参数值,字符型的'AUTO'会被当作逻辑值判断,转换后得到NA,从而触发错误。另外你的代码里还存在无用的layout代码,可能干扰绘图流程。
修正后的代码
my.date <- seq(as.POSIXct("2014-10-14 00:00:00", format="%F %T"), by="hour", length.out=6*128*24) library('WaveletComp') library('cowplot') # 必须加载cowplot包,plot_grid是该包函数 x <- periodic.series(start.period=1*24, length=6*128*24) my.data <- data.frame(date=my.date, x=x) my.wt <- analyze.wavelet(my.data, "x", loess.span=0, dt=1/24, dj=1/20, lowerPeriod=1/4, make.pval=TRUE, n.sim=10) # 移除无用的layout代码,避免干扰 # layaout2 <- layout(matrix(c(1, 2, 3), nrow=3)) # 绘制并记录第一幅图 wt.image(my.wt, main="wavelet power spectrum", legend.params=list(lab="wavelet power levels (quantiles)", lab.line=3.5, label.digits=2), periodlab="period (days)") p1 <- recordPlot() # 绘制并记录第二幅图 wt.image(my.wt, main="wavelet power spectrum", legend.params=list(lab="wavelet power levels (quantiles)", lab.line=3.5, label.digits=2), periodlab="period (days)") p2 <- recordPlot() # 合并两幅图,用明确的标签向量替代'AUTO' plot_grid(p1, p2, labels=c("A", "B"), # 直接指定标签,兼容性更好 hjust=0, vjust=1)
额外说明
- 必须加载
cowplot包,否则plot_grid函数无法正常调用。 - 如果使用新版
cowplot(v1.1.0及以上),也可以用labels="AUTO"来自动生成标签,但直接指定标签向量的方式兼容性更强,避免版本差异问题。 - 移除无用的
layout代码,因为plot_grid会自己处理布局,不需要提前设置基础绘图的布局。
内容的提问来源于stack exchange,提问作者temor
相关产品推荐
相关产品推荐

