如何在绘图上显示带粗体和普通字体的标签矢量?

时间:2017-05-12 13:30:20

标签: r vector text plot fonts

我想将文本标签添加到包含存储在矢量中的多个标签的粗体和普通字体的图中。

虽然我设法为单个标签(在下面的示例图中以绿色显示)执行此操作,但是当我有几个标签时,我想通过单个文本调用显示失败(在图中以红色显示) )。

以下是创建下图的示例:

plot(0,ylim=c(1,10),xlab="",ylab="",xaxt="n",yaxt="n")

mylabels <- c("Some text in bold: normal text", "Some other text in bold: more normal text")
text(x=rep(1, 2), y=c(10,9), labels=mylabels)

# change labels to show bold font before the colon and normal behind
mylabels.bold <- gsub("$","')", gsub(":", "'), ':", gsub("^","paste(bold('", mylabels)))
#> mylabels.bold
#[1] "paste(bold('Some text in bold'), ': normal text')"           
#[2] "paste(bold('Some other text in bold'), ': more normal text')"

# this works
text(x=1, y=8, labels=parse(text=mylabels.bold[1]), col="green")

# this doesn't
parsetext <- function(x) { parse(text=x) }
text(x=rep(1, 2), y=c(7,6), labels=lapply(mylabels.bold,parsetext), col="red")

example with labels in bold and normal font

所以问题是:如何让红色文字看起来像绿色?

1 个答案:

答案 0 :(得分:1)

这是一种方法。因此,不是试图在labels参数中循环,而是可以在外面循环,以便逐个添加标签。

plot(0, ylim=c(1,10), xlab="", ylab="", xaxt="n", yaxt="n")
xs <- rep(1, 2)
ys <- c(6, 7)
for (i in seq_along(mylabels.bold)) {
  text(x = xs[i], y = ys[i], labels = parse(text=mylabels.bold[1]), col = "red")
}

另一种解决方案是:

plot(0,ylim=c(1,10),xlab="",ylab="",xaxt="n",yaxt="n")
parsetext <- function(x) { parse(text=x) }
text(x=rep(1, 2), y=c(7,6), labels=sapply(mylabels.bold,parsetext), col="red")

如果您阅读?text的文档,您将看到标签需要是字符向量或表达式。 lapply创建一个列表,这就是失败的原因。另一方面,sapply创建一个矢量并起作用。

输出:

enter image description here