2015-08-26 2 views
4

Это может быть легко решить, но я ничего не нашел с 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. Следовательно, «Единица» на правом графике печатается ниже, чем на левом рисунке (см. Пример изображения, обозначенного красной линией). Это раздражает, если некоторые ярлыки имеют круглые скобки или буквы с частями, которые достигают базовой линии (например, «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 = »)' отлично справляется без таких трюков. –

Смежные вопросы