Как построить ортогональные векторы в basi c R plot ()? - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь построить векторы [0,7, 0,7] и [0,7, -0,7] таким образом, чтобы было визуально очевидно, что они ортогональны.

Поскольку R отображает точки (не векторы ) начало координат векторов будет обрезано, если я не отрегулирую ось x, чтобы включить начало координат:

dat <- cbind(c(.7,.7),c(.7,-.7))
plot(dat, main = "data", xlim=c(0,.8), xlab=NA, ylab=NA, type ="n")
arrows(x0 = 0, y0 = 0, x1 = dat[1,1], y1 = dat[2,1], lwd = 5, col="purple")
arrows(x0 = 0, y0 = 0, x1 = dat[1,2], y1 = dat[2,2], lwd = 5, col="orange")

Но, кроме того, у меня есть разные интервалы между отметками по осям x и y, искажающие геометрия векторов:

enter image description here

Чтобы доказать некоторую попытку решения этой проблемы, я безуспешно прибегал к нанесению осей после сюжета:

plot(dat, axes = FALSE)
axis(side = 1, at = seq(0,0.8, 0.01))
axis(side = 2, at = seq(-.8,.8,0.05))
arrows(x0 = 0, y0 = 0, x1 = dat[1,1], y1 = dat[2,1], lwd = 5, col="purple")
arrows(x0 = 0, y0 = 0, x1 = dat[1,2], y1 = dat[2,2], lwd = 5, col="orange")

... не очень красивая картинка.

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Укажите аргумент asp, который определяет y / x asp ect ratio.

dat <- cbind(c(.7,.7),c(.7,-.7))
plot(dat, main = "data", xlim=c(0,.8), xlab=NA, ylab=NA, type ="n", asp=1)
arrows(x0 = 0, y0 = 0, x1 = dat[1,1], y1 = dat[2,1], lwd = 5, col="purple")
arrows(x0 = 0, y0 = 0, x1 = dat[1,2], y1 = dat[2,2], lwd = 5, col="orange")

enter image description here

Подробную информацию об этом аргументе можно найти в:

?plot.window

asp: если asp - конечное положительное значение, то окно настроено так, что единица данных в направлении x равна asp * одной единице данных в направлении y.

Обратите внимание, что в этом случае par ("usr") больше не определяется, например, par ("xaxs"), а скорее asp и соотношением сторон устройства. (Посмотрите, что произойдет, если вы в интерактивном режиме измените размер устройства построения графика после выполнения примера ниже!)

Особый случай asp == 1 создает графики, на которых расстояния между точками точно отображаются на экране. Значения с asp> 1 могут использоваться для создания более точных карт при использовании широты и долготы.

0 голосов
/ 18 июня 2020

попробуйте установить пределы:

xlim = c(-.1, 1)
ylim = c(-.8, .8)

Это будет рисовать полный экстент пространства, которым описываются ваши векторы. Если ваша цель состоит в том, чтобы ограничить пропорции, вы можете изменить объем ограничений и не заполнять все пространство, но сохранить пропорции для обеих осей

xlim = c(-1, 1)
ylim = c(-1, 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...