为了账号安全,请及时绑定邮箱和手机立即绑定

在绘图标签中组合paste()和expression()函数

/ 猿问

在绘图标签中组合paste()和expression()函数

陪伴而非守候 2019-11-28 09:57:03

考虑以下简单示例:


labNames <- c('xLab','yLabl')

plot(c(1:10),xlab=expression(paste(labName[1], x^2)),ylab=expression(paste(labName[2], y^2)))

我想要的是使变量'labName,'xLab'或'yLab'定义的字符输入出现在expression()定义的X ^ 2或y ^ 2旁边。照原样,带有下标的实际文本'labName'被连接到上标表达式。


有什么想法吗?


查看完整描述

3 回答

?
函数式编程

bquote()函数@Aaron的替代解决方案。我们需要提供一个有效的R表达式,在这种情况下LABEL ~ x^2,例如,LABEL您要从vector分配的字符串在哪里labNames。bquote计算包装在表达式中的R代码,.( )并将结果代入表达式中。


这是一个例子:


labNames <- c('xLab','yLab')

xlab <- bquote(.(labNames[1]) ~ x^2)

ylab <- bquote(.(labNames[2]) ~ y^2)

plot(c(1:10), xlab = xlab, ylab = ylab)

(请注意,~只是增加了一些间距,如果您不希望使用空格,请将其替换为,*并且表达式的两个部分将并列。)


查看完整回答
反对 2019-11-28
?
萧十郎

使用substitute代替。


labNames <- c('xLab','yLab')

plot(c(1:10),

     xlab=substitute(paste(nn, x^2), list(nn=labNames[1])),

     ylab=substitute(paste(nn, y^2), list(nn=labNames[2])))


查看完整回答
反对 2019-11-28
?
炎炎设计

最后添加了ggplot2的新示例


有关R中不同的数学运算,请参见?plotmath


您应该能够使用表达式而无需粘贴。如果在表达式函数中使用tilda(〜)符号,它将假定字符之间有空格,或者可以使用*符号,并且不会在参数之间放置空格


有时,您需要更改将上标放在y轴上的边距。


par(mar=c(5, 4.3, 4, 2) + 0.1)

plot(1:10, xlab = expression(xLab ~ x^2 ~ m^-2),

     ylab = expression(yLab ~ y^2 ~ m^-2),

     main="Plot 1")

//img1.sycdn.imooc.com/5ddf298c000123ef04530470.jpg

plot(1:10, xlab = expression(xLab * x^2 * m^-2),

     ylab = expression(yLab * y^2 * m^-2),

     main="Plot 2")

//img2.sycdn.imooc.com/5ddf29940001cf5304530470.jpg

plot(1:10, xlab = expression(xLab ~ x^2 * m^-2),

     ylab = expression(yLab ~ y^2 * m^-2),

     main="Plot 3")

//img3.sycdn.imooc.com/5ddf299f0001ed6904530470.jpg

希望您可以看到在图1,图2和图3之间使用〜和*符号的不同用法的区别。需要特别注意的是,您可以使用其他符号,例如绘制度符号以表示温度或μ,phi。如果要添加下标,请使用方括号。


plot(1:10, xlab = expression('Your x label' ~ mu[3] * phi),

     ylab = expression("Temperature (" * degree * C *")"))

//img4.sycdn.imooc.com/5ddf29a6000180a204530470.jpg

这是一个使用表达式的ggplot示例和一个废话示例


require(ggplot2)

或者,如果您已安装pacman库,则可以使用p_load自动下载并加载和附加附加软件包


# require(pacman)

# p_load(ggplot2)


data = data.frame(x = 1:10, y = 1:10)


ggplot(data, aes(x,y)) + geom_point() + 

  xlab(expression(bar(yourUnits) ~ g ~ m^-2 ~ OR ~ integral(f(x)*dx, a,b))) + 

  ylab(expression("Biomass (g per" ~ m^3 *")")) + theme_bw()

//img1.sycdn.imooc.com/5ddf29ad0001750d07500624.jpg

查看完整回答
反对 2019-11-28
  • 3 回答
  • 0 关注
  • 295 浏览

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信