2015-08-26 108 views
4

這可能很容易解決,但我沒有找到任何與谷歌,可能是因爲很難說的話。當運行下面的代碼軸標的基線對齊

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是繪製標籤,使得在xlab-command中使用expression()時,文本字符串的最低點被視爲基線。因此,右側繪圖中的「A單位」會比左側繪圖更深(參見示例圖像,用紅線表示)。如果某些標籤的圓括號或字母的部分達到基線以下(例如「g」,「q」等),而其他標籤沒有,則很煩人。有什麼辦法解決這個問題嗎?

enter image description here

回答

4

我可能是錯的,但我不認爲這會發生對普通的文字,例如我沒有看到它帶有純字符向量「qqq」和「ooo」的標籤,這些標籤似乎在其基線處正確對齊。我還懷疑plotmath表達式的對齊問題與設備有關。

Plotmath不具備(La)Tex的複雜性,因此與邊界框對齊而不是基線是一個「特徵」。當然,您可以通過撥打par設置或使用mtext來手動微調位置。但是,在許多情況下,例如這種情況下,您可以通過設置幻像字符來實現對齊。例如,改變第二陰謀在您的示例如下產生令人滿意的效果:

plot(Dat[,1], Dat[,3], ylab="Y", 
    xlab=expression(paste(phantom('('),"A unit",phantom(')')))) 

phantom parentheses

+1

非常感謝,這是卓有成效的。是的,你說得對,這個問題只有在使用'expression()'時纔會發生。如果沒有這些技巧,一個普通的'xlab =「A單元(m)」'還有'xlab = paste(「單元(」,「m」,「)」,sep =「)'是完全正確的。 –