轴标签的基线对齐
Baseline alignment of axis labels
这可能很容易解决,但我没有找到 google 的任何东西,可能是因为很难用语言表达。当运行下面的代码
Dat<-matrix(c(1:10, 1:10, seq(0.1, 1, 0.1)), 10, 3)
par(mfrow=c(1, 2))
plot(Dat[,1], Dat[,2], ylab="Y", xlab=expression(paste("A unit (", m^2, ")", sep="")))
plot(Dat[,1], Dat[,3], ylab="Y", xlab="A unit")
我得到了一个不错的图,但 x 轴标签不在同一基线上。原因是左图的标签有一个括号低于文本的基线,而 R 正在绘制标签,使得在使用 expression()
时以文本字符串的最低点作为基线xlab 命令。因此,右图中的 "A unit" 打印得比左图中的更靠下(参见示例图像,用红线表示)。如果某些标签的括号或字母的部分低于基线(如 "g"、"q" 等)而其他标签则没有,那就很烦人了。有什么办法可以解决这个问题吗?
我可能是错的,但我认为普通文本不会出现这种情况,例如我没有看到它带有普通字符向量 "qqq" 和 "ooo" 的标签,它们似乎在其基线处正确对齐。我还怀疑 plotmath 表达式的对齐问题在某种程度上取决于设备。
Plotmath 没有 (La)Tex 的复杂性,因此对齐边界框而不是基线是 "feature"。当然,您可以通过摆弄 par
设置或使用 mtext
手动调整位置。然而,在许多情况下,例如本例,您可以通过设置幻象字符来匹配来实现对齐。例如,将示例中的第二个图更改为以下内容会产生令人满意的结果:
plot(Dat[,1], Dat[,3], ylab="Y",
xlab=expression(paste(phantom('('),"A unit",phantom(')'))))
这可能很容易解决,但我没有找到 google 的任何东西,可能是因为很难用语言表达。当运行下面的代码
Dat<-matrix(c(1:10, 1:10, seq(0.1, 1, 0.1)), 10, 3)
par(mfrow=c(1, 2))
plot(Dat[,1], Dat[,2], ylab="Y", xlab=expression(paste("A unit (", m^2, ")", sep="")))
plot(Dat[,1], Dat[,3], ylab="Y", xlab="A unit")
我得到了一个不错的图,但 x 轴标签不在同一基线上。原因是左图的标签有一个括号低于文本的基线,而 R 正在绘制标签,使得在使用 expression()
时以文本字符串的最低点作为基线xlab 命令。因此,右图中的 "A unit" 打印得比左图中的更靠下(参见示例图像,用红线表示)。如果某些标签的括号或字母的部分低于基线(如 "g"、"q" 等)而其他标签则没有,那就很烦人了。有什么办法可以解决这个问题吗?
我可能是错的,但我认为普通文本不会出现这种情况,例如我没有看到它带有普通字符向量 "qqq" 和 "ooo" 的标签,它们似乎在其基线处正确对齐。我还怀疑 plotmath 表达式的对齐问题在某种程度上取决于设备。
Plotmath 没有 (La)Tex 的复杂性,因此对齐边界框而不是基线是 "feature"。当然,您可以通过摆弄 par
设置或使用 mtext
手动调整位置。然而,在许多情况下,例如本例,您可以通过设置幻象字符来匹配来实现对齐。例如,将示例中的第二个图更改为以下内容会产生令人满意的结果:
plot(Dat[,1], Dat[,3], ylab="Y",
xlab=expression(paste(phantom('('),"A unit",phantom(')'))))