Построение осей с разными масштабами для одного набора данных в R - PullRequest
4 голосов
/ 20 февраля 2010

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

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

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

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 игнорировать набор данных и просто напечатать произвольную ось по моему выбору?

Ответы [ 2 ]

7 голосов
/ 20 февраля 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 подавлена ​​и построена справа. Но ярлыки показывают, что вы сейчас микшируете на разные уровни.

3 голосов
/ 20 февраля 2010

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

> plot(x = dataset$x, y = dataset$y)
> axis(4, at = axTicks(2), label = axTicks(2) * 10)
...