base R绘图中如何将paste生成的向量设置为粗体坐标轴标题
核心原因
你之前的尝试失败是因为expression()不会对内部包含的变量进行求值,只会直接把变量名/函数名作为表达式文本的一部分渲染,不会读取你提前计算好的a、b的值。
首选方案:使用bquote()插入动态值
bquote()支持通过.()语法将已经计算完成的变量值嵌入表达式中,完美匹配你的需求,示例代码如下:
# 提前计算好变量值 calc1 <- 1/4 a <- paste(calc1, "X", sep = "") calc2 <- (1/2)*100 b <- paste(calc2, "%", sep = "") x <- c(1, 2, 3) y <- c(4, 5, 6) # 绘图时用bquote包裹,.()内部的变量会自动代入实际值 plot(x, y, xlim = c(1, 3), xlab = bquote(bold(.(a))), ylim = c(4, 6), ylab = bquote(bold(.(b))))
如果不想提前定义a、b变量,也可以直接把计算逻辑写在.()内部,通过*连接文本可以避免出现多余空格:
plot(x, y, xlim = c(1, 3), xlab = bquote(bold(.(calc1)*"X")), ylim = c(4, 6), ylab = bquote(bold(.(calc2)*"%")))
备选方案1:构造表达式文本后解析
你也可以先拼接好符合表达式语法的文本,再通过parse(text = )转成可渲染的表达式:
# 构造表达式文本 x_lab_text <- paste0("bold('", a, "')") y_lab_text <- paste0("bold('", b, "')") plot(x, y, xlim = c(1, 3), xlab = parse(text = x_lab_text), ylim = c(4, 6), ylab = parse(text = y_lab_text))
备选方案2:全局设置轴标题粗体
如果你所有的坐标轴标题都需要加粗,不需要单独控制格式,直接设置font.lab = 2参数更简单,不需要处理表达式:
plot(x, y, xlim = c(1, 3), xlab = a, ylim = c(4, 6), ylab = b, font.lab = 2)
内容的提问来源于stack exchange,提问作者Miki G.
相关产品推荐
相关产品推荐

