这可能很容易解决,但我没有用谷歌找到任何东西,也许是因为很难用语言表达。运行以下代码时
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")
Run Code Online (Sandbox Code Playgroud)
我得到了一个很好的图,但 x 轴标签不在同一基线上。原因是左图的标签有一个到达文本基线以下的括号,而 R 正在绘制标签,以便expression()在 xlab-command 中使用时将文本字符串的最低点作为基线。因此,右侧图中的“A 单位”比左侧图中打印得更靠下(参见示例图像,由红线表示)。如果某些标签的括号或字母的部分低于基线(如“g”、“q”等)而其他标签没有,那就很烦人了。有没有办法解决这个问题?
我收到了对我提交出版的图的评论,通过测试才意识到一些我之前不知道的事情:当使用位图驱动程序时,R 似乎使用连字符而不是正确的减号来表示轴上的负值。有什么办法可以纠正吗?
library(extrafont)
loadfonts(device="win", quiet=TRUE)
png("Test.png", family="Helvetica", width=5, height=5, units="in", res=300)
plot(-3:3, -3:3)
text(-2, 2, labels=("\u2010 Hyphen"), pos=4)
text(-2, 1.5, labels=("\u002d Hyphen-Minus"), pos=4)
text(-2, 1, labels=("\u2212 Minus"), pos=4)
dev.off()
Run Code Online (Sandbox Code Playgroud)
如果您查看图像,轴上的负数显然用连字符而不是减号错误地标记。
使用pdf()-driver 时,负值正确使用减号。我知道对于pdf()-driver,这可以通过使用 来更改cairo-pdf()。但是,在- 或 -驱动程序中使用另一种类型(例如type="windows")不会将连字符更改为减号。png()tiff()
有没有办法使用 bitmab 驱动程序对负轴值使用正确的减号?
我希望让lm()接受一个字符串作为公式输入,但它不是很有效.这项工作到目前为止:
Test<-as.data.frame(matrix(sample(1:100, 12), 4, 3))
colnames(Test)<-c("Y", "X1", "X2")
lm(Y~X1, data=Test)
XT1<-"X1"
lm(Y~eval(parse(text=XT1)), data=Test)
Run Code Online (Sandbox Code Playgroud)
这很好,并产生正确的输出.但是,当我试图拥有多个参数时:
lm(Y~X1+X2, data=Test)
XT2<-"X1+X2"
lm(Y~eval(parse(text=XT2)), data=Test)
Run Code Online (Sandbox Code Playgroud)
这不会产生相同的结果.我想知道为什么因为显然字符串都被正确解释:
parse(text=XT1)
parse(text=XT2)
Run Code Online (Sandbox Code Playgroud)
对于背景:最后这应该在一个函数中工作,其中提供了一个参数矩阵,XT2字符串应该从矩阵的名字中动态创建,所以我需要一个适用于所有可能的XT2的解决方案长度在1和(假设)无穷大之间.