Построение осей с разными масштабами для одного набора данных в R

У меня есть большой набор данных, который я рисую в R, и я хотел бы, чтобы оси с каждой стороны графика отображали данные в двух разных масштабах. Так, например, на левой вертикальной оси я хотел бы напрямую отобразить данные (например, plot (y ~ x)), а на правой оси я бы хотел иметь линейное масштабирование левой оси. (например, сюжет (y * 20 ~ x).

Таким образом, будет отображаться только один набор данных, но оси будут показывать разные значения для этих точек данных.

Я пробовал следующее:

plot(x = dataset$x, y = dataset$y)
axis(4, pretty(dataset$y,10) )

Это правильно напечатает новую правую ось с тем же масштабом, что и левая ось по умолчанию. (по сути бесполезно, но работает) Однако, если я сделаю это крошечное изменение:

plot(x = dataset$x, y = dataset$y)
axis(4, pretty(10*dataset$y,10) )

Вдруг отказывается добавлять мою новую правую ось. Я подозреваю, что это как-то связано с тем, что R видит, соответствует ли ось каким-либо образом набору данных, и отклоняет его, если нет. Как я могу заставить R игнорировать набор данных и просто печатать произвольную ось по моему выбору?


person Community    schedule 20.02.2010    source источник


Ответы (2)


Кажется, R не отвергает ваши топоры. Какую ошибку вы получаете? Ваша команда поместит галочки далеко за пределы графика (поскольку для их расположения используется первая ось). Я думаю, вам нужно следующее:

> plot(x = dataset$x, y = dataset$y)
> axis(4, at = axTicks(2), label = axTicks(2) * 10)
person Community    schedule 20.02.2010
comment
Это идеально, элегантно решила мою проблему. Моя проблема заключалась не в том, что метки рисовались неправильно, а в том, что мне нужно было их пометить заново. - person deontologician; 23.02.2010
comment
Таким образом, at = axTicks (2) означает получение новых отметок оси со стороны графика = 2; и label = axTicks (2) * 10 означает создание меток из отметок «at» с масштабированием на 10. Верно? - person philcolbourn; 05.11.2010

То, о чем вы просите, не всегда является правильной практикой, но вы можете добиться этого с помощью par(new=TRUE):

x <- 1:20
plot(x, log(x), type='l') 
par(new=TRUE)              # key: ask for new plot without erasing old
plot(x, sqrt(x), type='l', col='red', xlab="", yaxt="n")
axis(4)

Ось x нанесена дважды, но, поскольку у вас одинаковые координаты x, это не проблема. Вторая ось Y подавлена ​​и отображается справа. Но ярлыки показывают вам, что вы сейчас микшируете на разных уровнях.

person Community    schedule 20.02.2010
comment
Вы также можете использовать аргумент axes=F во втором вызове plot(), чтобы подавить двойное построение оси x. - person Sharpie; 20.02.2010