Подтвердить что ты не робот

Как поместить перехват осей x и y в (0, 0) и расширить оси x и y до края графика

Предположим, что я хочу построить x^2. Я могу использовать curve() следующим образом.

curve(x^2, -5, 5)

enter image description here Тем не менее, я хотел бы, чтобы оси проходили (0, 0). Я мог бы сделать что-то следующим образом:

curve(x^2, -5, 5, axes=FALSE)
axis(1, pos=0)
axis(2, pos=0)
abline(h=0)
abline(v=0)

И я получаю что-то вроде ниже, которое выглядит нормально. Но единственное, что у меня есть, это то, что этот способ построения осей делает фактические оси - например, сегмент между -4 и 4 оси х - толще сегментов в правой и левой частях. То же самое происходит с осью y. Интересно, есть ли лучший способ построения осей. Спасибо!

enter image description here

4b9b3361

Ответ 1

По умолчанию ось() автоматически вычисляет положение меток, но вы можете определить их вручную с помощью аргумента at. Таким обходным может быть что-то вроде:

curve(x^2, -5, 5, axes=FALSE)
axis(1, pos=0, at=-5:5)
axis(2, pos=0)

Что дает:

enter image description here

Проблема заключается в том, что вам нужно вручную определить положение каждой отметки. Немного лучше было бы вычислить их с помощью функции axTicks (той, которая была использована по умолчанию), но вызвала это с помощью настраиваемого аргумента axp, который позволяет указать соответственно минимальный, максимальный и количество интервалов для тиков по оси:

curve(x^2, -5, 5, axes=FALSE)
axis(1, pos=0, at=axTicks(1,axp=c(-10,10,10)))
axis(2, pos=0)

Что дает:

enter image description here

Ответ 2

Аргументы yaxs и xaxs управляют расстоянием между графиками. Установите "i", чтобы опустить это:

curve(x^2, -5, 5, yaxs = "i")

Смотрите также: fooobar.com/info/208667/...