我知道这个问题的标题是this Question和this Question的副本,但那里的解决方案对我不起作用,并且错误消息(略有)不同:
Error in grid.Call(L_textBounds, as.graphicsAnnot(x$label), x$x, x$y, :
polygon edge not found
(注意缺少字体的缺失部分)
我尝试了我找到的所有建议(更新/重新安装所有已加载的图形包,ggplot2,GGally和scale,通过以安全模式启动,将字体从/字体/(已禁用)移回到Mac OSX中重新初始化字体/字体......)但没有一个解决了问题。
当我使用
绘制ggplot图时,似乎出现错误scale_y_continuous(label=scientific_10)
其中scientific_10
定义为
scientific_10 <- function(x) {
parse(text = gsub("e", " %*% 10^", scientific_format()(x)))
}
因此,我怀疑scales
库与它有关。
最令人费解的是,错误只发生在每次这么多次,也许每次第3次或第5次我试图绘制相同的图...
> sessionInfo()
R version 3.2.2 (2015-08-14)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.9.5 (Mavericks)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] gridExtra_2.0.0 scales_0.3.0 broom_0.4.0 tidyr_0.3.1 ggplot2_1.0.1 GGally_0.5.0 dplyr_0.4.3
loaded via a namespace (and not attached):
[1] Rcpp_0.11.5 magrittr_1.5 MASS_7.3-43 mnormt_1.5-1 munsell_0.4.2 colorspace_1.2-6 lattice_0.20-33 R6_2.0.1
[9] stringr_0.6.2 plyr_1.8.1 tools_3.2.2 parallel_3.2.2 grid_3.2.2 gtable_0.1.2 nlme_3.1-121 psych_1.5.8
[17] DBI_0.3.1 htmltools_0.2.6 lazyeval_0.1.10 yaml_2.1.13 assertthat_0.1 digest_0.6.8 reshape2_1.4.1 rmarkdown_0.8.1
[25] labeling_0.3 reshape_0.8.5 proto_0.3-10
traceback()
35: grid.Call(L_textBounds, as.graphicsAnnot(x$label), x$x, x$y,
resolveHJust(x$just, x$hjust), resolveVJust(x$just, x$vjust),
x$rot, 0)
34: widthDetails.text(x)
33: widthDetails(x)
32: (function (x)
{
widthDetails(x)
})(list(label = expression(5 %*% 10^+5, 7.5 %*% 10^+5, 1 %*%
10^+6, 1.25 %*% 10^+6, 1.5 %*% 10^+6), x = 1, y = c(0.0777214770341215,
0.291044141334423, 0.504366805634725, 0.717689469935027, 0.931012134235329
), just = "centre", hjust = 1, vjust = 0.5, rot = 0, check.overlap = FALSE,
name = "axis.text.y.text.8056", gp = list(fontsize = 9.6,
col = "black", fontfamily = "", lineheight = 0.9, font = 1L),
vp = NULL))
31: grid.Call.graphics(L_setviewport, vp, TRUE)
30: push.vp.viewport(X[[i]], ...)
答案 0 :(得分:3)
我通过安装库extrafont解决了这个问题,安装了一组特定字体并强制ggplot只使用这些字体:
require(extrafont)
# need only do this once!
font_import(pattern="[A/a]rial", prompt=FALSE)
require(ggplot2)
# extending the help file example
df <- data.frame(gp = factor(rep(letters[1:3], each = 10)), y = rnorm(30))
ds <- plyr::ddply(df, "gp", plyr::summarise, mean = mean(y), sd = sd(y))
plotobj <- ggplot(df, aes(gp, y)) +
geom_point() +
geom_point(data = ds, aes(y = mean), colour = 'red', size = 3) +
theme(text=element_text(size=16, family="Arial"))
print(plotobj)
答案 1 :(得分:0)
针对此特定错误的许多解决方案都会引导您查看计算机,但此错误也可能由脚本错误引起,其中R期望匹配来自两个数据结构的元素但不能。 / strong>
对我来说,错误是由调用一个相当复杂的图形函数(见下文)引起的,该函数读取有序字符向量以及一个矩阵,其行名称应该与有序字符向量中的值匹配。问题是我的一些值包含破折号,而R的read.table()
函数将破折号转换为句点(例如:“HLA-DOA”变为“HLA.DOA”)。
我正在使用ComplexHeatmap软件包进行如下调用:
oncoPrint(mat,
get_type = function(x) strsplit(x, ";")[[1]],
alter_fun_list = alter_fun_list,
col = col,
row_order = my_order,
column_title = "OncoPrint",
heatmap_legend_param = list(title = "Alternations", at = c("AMP", "HOMDEL", "MUT"), labels = c("Amplification", "Deep deletion", "Mutation"))
)
在此电话会议中:
mat
是一个矩阵,其中的短划线被换掉了my_order
是一个字符向量,包含与mat
的行名相同的值,但短划线仍然存在为了帮助R找到这个难以捉摸的“多边形边缘”,我只是编辑了我的角色向量:
row_order <- gsub("\\.", "-", row_order)
如果您尝试重新安装软件包,重新启动计算机并重新启用字体 - 可能会检查并确定您的电话中是否存在某些错误的字符匹配。
答案 2 :(得分:0)
我试图设置aes的字体,返回错误信息
添加的词语:
p&lt; - p + theme(text = element_text(family =“宋体”))
当我尝试删除设置时,那就没关系。
答案 3 :(得分:0)
实际上,我在我的MAC上遇到了同样的问题并且无法在常规基础上解决它...因为它也像每次执行第5或第10次一样,我决定将整个ggplot
命令包装成一个trycatch
调用并执行它,直到它没有失败...
代码看起来像这样
error_appeared <- FALSE
repeat{
tryCatch({ # we put everything into a try catch block, because sometimes we get an error
gscat <-
ggplot() # my ggplot command which sometimes fail
ggsave('file.pdf', gscat, width=8,height=8)
plot(gscat)
},
error=function(e) {
print('redo the ratioscatterplot.')
error_appeared <- TRUE
}
)
if(!error_appeared){
break
}
}
实际上我想通了,只有图的绘图/绘图给出了问题!保存总是有效。
也许这对某人有帮助,因为我找不到真正解决问题的解决方案!
其他强>
如果有人想在“可重现的例子”中使用该问题,则下面的代码会在循环中平均抛出20个错误。
library(scales)
library(ggplot2)
df <- data.frame(
log2.Ratio.H.L.normalized.rev = c(2.53861265542646, 0.402176424979483, 0.438931541934545, 0.639695233399582, 0.230203013366421,
2.88223218956399, 1.23051046036618, 2.56554843533357, 0.265436896049098,
1.32866415755805, -0.92108963514092, 0.0976107966264223, -0.43048946484291,
-0.558665259531966, 4.13183638727079, 0.904580434921318, -0.0733780789564803,
-0.621932351219966, 1.48594198341242, -0.365611185917855, 1.21088754922081,
-2.3717583289898, 2.95160644380282, 3.71446534016249),
Intensity = c(5951600000, 2.4433e+10, 1.1659e+10, 2273600000, 6.852e+10, 9.8746e+10, 5701600000,
1758500000, 987180000, 3.4167e+11, 1.5718e+10, 6.8888e+10, 5.5936e+10,
8702900000, 1093500000, 4426200000, 1.3681e+11, 7.773e+09, 5860400000,
1.2861e+12, 2017900000, 2061300000, 240520000, 1382700000),
my_label = c("RPL18",
"hCG_2024613", "NOL7", "PRPF4B", "HIST1H2BC", "XRCC1", "C9orf30",
"CABIN1", "MGC3731", "XRCC6", "RPL23", "RPL27", "RPL17", "RPL32",
"XPC", "RPL15", "GNL3", "RPL29", "JOSD3", "PARP1", "DNAPTP6",
"ORC2L", "NCL", "TARDBP"))
unlink("figures", recursive=TRUE)
if(!dir.exists('figures')) dir.create('figures')
for(i in 1:20) {
error_appeared <- FALSE
repeat{
tryCatch({ # we put everything into a try catch block, because sometimes we get an error
gscat <-
ggplot(df, aes_string("log2.Ratio.H.L.normalized.rev", 'Intensity')) +
geom_point(data=df[abs(df[["log2.Ratio.H.L.normalized.rev"]]) < 1,],
color='black', alpha=.3, na.rm=TRUE) +
scale_y_log10(labels = scales::trans_format("log10", scales::math_format()))
ggsave(file.path('figures', paste0('intensity_scatter_', i, '.pdf')),
gscat, width=8, height=8)
plot(gscat)
},
error=function(e) {
# print(e)
print(sprintf('%s redo the ratioscatterplot.', i))
error_appeared <- TRUE
}
)
if(!error_appeared){
break
}
}
}
答案 4 :(得分:-1)
我在尝试将ggplot / grid输出绘制到Rstudio中的图形窗口时遇到了同样的问题。但是,绘制到外部图形设备似乎工作正常。
选择的外部设备取决于您的系统,但下面的脚本(this blog转述)适用于大多数系统:
a = switch(tolower(Sys.info()["sysname"]),
"darwin" = "quartz",
"linux" = "x11",
"windows" = "windows")
options("device" = a)
graphics.off()
rm(a)
并切换回使用Rstudio绘图窗口:
options("device"="RStudioGD")
graphics.off()
请注意,通过切换,您将丢失所有现有图表。