使用表达式(paste(...))时轴标签的间距问题

14

考虑以下示例:

plot(c(2,4,6)~c(1,2,3),xlab="x",
ylab=expression(paste('flux (g ',CO[2]~m^{-2}~h^{-1},')')))

很明显我想在"g"和"CO"之间有个完整的空格,但是由于某些原因,在图表标签中我得到了一个较小的空格(有些标签甚至为零)。

如果我这样做问题会更加明显:

plot(c(2,4,6)~c(1,2,3),xlab="x",
ylab=expression(paste('flux (g C',O[2]~m^{-2}~h^{-1},')')))

我做错了什么吗?有没有一种方法可以修复间距,或者更好的创建带有大量上下标和希腊字母的标签?


1
ylab=expression("flux"~(g~CO[2]~m^{-2}~h^{-1}))) 更好吗?(意思是:为什么要使用paste?) - baptiste
不,这样并不更好,因为flux后面的空间太小了。 - Roland
不知道,对我来说间距看起来是正确的。请告诉我们您的操作系统、图形设备和屏幕截图。另外,请查看以下是否显示递增的间距:library(grid) ; grid.text(expression(flux*(g~CO[2]~m^{-2}~h^{-1}), flux~(g~CO[2]~m^{-2}~h^{-1}), flux~~(g~CO[2]~m^{-2}~h^{-1})), y=unit(0.5,"npc") + unit(0:2,"lines")) - baptiste
平台 x86_64-pc-mingw32
体系架构 x86_64
操作系统 mingw32
系统 x86_64, mingw32
状态
主版本 2
次版本 15.0
年份 2012
月份 03
日期 30
svn版本 58871
编程语言 R
版本字符串 R version 2.15.0 (2012-03-30)
- Roland
第二个运行良好。似乎应该避免混合字符串和表达式。如果字符串稍长,这会很麻烦。 - Roland
我在石英设备上看不出"flux "*(g~CO[2]~m^{-2}~h^{-1})flux~(g~CO[2]~m^{-2}~h^{-1})之间的区别。 - baptiste
1个回答

15

很可能您正在获得一个在无衬线字体显示中您的操作系统使用的字体的排版正确的“空格”。您可以更改字体,或者您可以插入足以容纳使用plotmath中的phantom()函数指定的特定字符串的空格。

 plot(c(2,4,6)~c(1,2,3),xlab="x",
     ylab=expression(paste('flux',phantom(x),'(g ',CO[2]~m^{-2}~h^{-1},')')))

正如@baptiste指出的那样,这可以在不使用plomath的情况下完成,使用普通的plotmath分隔符,因为在真实的R表达式中,波浪线会被处理为“空格”:

     ylab=expression(flux*phantom(x)*(g~CO[2]~m^{-2}~h^{-1})))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接