Как нарисовать линии сетки с помощью abline (), которые находятся за данными? - PullRequest
33 голосов
/ 01 сентября 2011

Когда я рисую линии сетки на графике, используя abline(), линии данных рисуются поверх данных.

Есть ли способ нарисовать abline() линии за данными? Я чувствую, что это выглядело бы лучше.

Пример:

x <- seq(0, 10)
y <- x
plot(x, y, col = 'red', type = 'o', lwd = 3, pch = 15)
abline(h = seq(0, 10, .5), col = 'lightgray', lty = 3)
abline(v = seq(0, 10, .5), col = 'lightgray', lty = 3)

Полученный график имеет серые линии сетки, проходящие над данными (красная линия). Я бы хотел, чтобы красная линия была сверху серых линий.

Ответы [ 4 ]

40 голосов
/ 01 сентября 2011

Аргумент panel.first для plot() может принимать список или вектор функций, чтобы вы могли помещать туда свои вызовы abline().

plot(1:4, panel.first = 
       c(abline(h = 1:4, lty = 2, col = 'grey') 
        ,abline(v = 1:4, lty = 2, col = 'grey')))
16 голосов
/ 01 сентября 2011

Используйте plot() для настройки окна печати, но используйте type = "n", чтобы не отображать какие-либо данные.Затем выполните abline() вызовы или используйте grid(), а затем нанесите на график данные, используя любую низкоуровневую функцию (здесь points() нормально).

x <- seq(0, 10)
y <- x
plot(x, y, type = "n")
abline(h = seq(0, 10, .5), col = 'lightgray', lty = 3)
abline(v = seq(0, 10, .5), col = 'lightgray', lty = 3)
points(x, y, col = 'red', type = 'o', lwd = 3, pch = 15)

или

## using `grid()`
plot(x, y, type = "n")
grid()
points(x, y, col = 'red', type = 'o', lwd = 3, pch = 15)

См. ?grid для получения подробной информации о том, как указать сетку в соответствии с вашей abline() версией.

8 голосов
/ 01 сентября 2011

Сначала укажите тип = "n", чтобы установить координаты. Затем вставьте линии сетки, затем повторите график с обычным типом графика:

plot(x, y, col = 'red', type = 'n', lwd = 3, pch = 15)
abline(h = seq(0, 10, .5), col = 'lightgray', lty = 3)
abline(v = seq(0, 10, .5), col = 'lightgray', lty = 3)
par(new=TRUE)
plot(x, y, col = 'red', type = 'o', lwd = 3, pch = 15)

Я признаю, что всегда думал, что имя для этого параметра par было "назад".

1 голос
/ 01 сентября 2011

Другим способом создания линий сетки является установка tck=1 при построении или в функции axis (вы все равно можете построить точки с помощью points после создания линий сетки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...