2017-01-15 3 views
-1

В последней строке приведенного ниже примера мне пришлось вручную попробовать несколько разных значений для pos, прежде чем я обнаружил «правильное» значение, которое было за пределами labels, который уже был нанесен в предыдущей строке. Есть ли способ узнать, что правильное значение pos автоматически?Автоматическое определение правильного значения 'pos' для построения меток осей

dev.off() 
windows(width = 8, height = 6) 
par(mai = c(0.3, 2.5, 0.3, 0.3)) #bottom, left, top and right 
set.seed(42) 
plot(rnorm(15,10,1),rnorm(15,10,1), type = "p", 
    ylim = c(5,15), xlim = c(5,15), xlab = "", ylab = "", 
    xaxt = "n", yaxt = "n", yaxs="i", xaxs="i") 
axis(2, at = c(5,10,15), labels = c("This one", "Particularly long one", "two"), las = 2) 
axis(2, at = 10, pos = 2, labels = "Y Axis Label", font = 2, tick = FALSE, cex.axis = 1.5) 

ответ

1

Вы можете захватить par(usr)[1] и вычесть strwidth вашей длинной этикетки, чтобы получить позицию:

dev.off() 
windows(width = 8, height = 6) 
par(mai = c(0.3, 2.5, 0.3, 0.3)) #bottom, left, top and right 
set.seed(42) 
plot(rnorm(15, 10, 1),rnorm(15, 10, 1), type = "p", 
    ylim = c(5, 15), xlim = c(5, 15), xlab = "", ylab = "", 
    xaxt = "n", yaxt = "n", yaxs= "i", xaxs= "i") 
axis(2, at = c(5, 10, 15), 
    labels = c("This one", "Particularly long one", "two"), las = 2) 

# get the position based on the long string width and par('usr')[1] 
pos <- par('usr')[1] - strwidth("Particularly long one") 

axis(2, at = 10, pos = pos, 
    labels = "Y Axis Label", font = 2, tick = FALSE, cex.axis = 1.5) 

enter image description here

Конечно, если вы измените размер изображения в интерактивном режиме после этого, все ставки отключены.

+1

@DarshanBaral Конечно, некоторое сочетание 'max',' which.max' или 'which' должно помочь. 'max (strwidth (label_variable))' будет получать максимум и 'which (strwidth (label_variable) == max (strwidth (label_variable))' скажет вам, какие из них являются максимальными значениями. – Jota

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