Как добавить фоновую сетку для построения графика с пользовательскими интервалами в R?

Как я могу добавить фоновую сетку к графику R, чтобы фоновые линии были равномерно разнесены на одну единицу друг от друга?

Вот что я пробовал до сих пор:

x = 1:10
y = 21:30
plot(x, y, yaxt="n")
axis(2, at=20:30, las=2)
grid(NULL, NULL)

х против у

Здесь я вижу, что этот вызов сетки выравнивает эту сетку с ось по умолчанию. (В данном случае 22, 24, 26, 28 и 30.) Однако я хочу выровнять сетку по новой оси, то есть 21, 22, ... 30. Кроме того, я вижу, что это накладывает сетку на вершина очков. Я хотел бы видеть сетку на заднем плане.

Примечание. Мне не нужно решение с помощью absline(), если только эти строки нельзя перевести в фоновый режим.

Примечание 2. Это не повторение этого вопроса. Они просто хотят добавить сетку. Мой вопрос отличается тем, что я хочу добавить сетку в фоновом режиме и с линиями с произвольным интервалом.


person Everyone_Else    schedule 13.06.2016    source источник
comment
Я тоже с этим боролся. Решения, которые я обычно использую, включают начало с plot(NA, type = "n", xlim = c(...), ylim = c(...)) с известными ограничениями, добавление линий, а затем добавление соответствующих графических элементов на холст. Это хорошо работает, когда базовые инструменты, такие как points, lines и polygon, подходят для всех требований, а не для более сложных задач построения графиков.   -  person r2evans    schedule 14.06.2016
comment
Спасибо, я попробую это   -  person Everyone_Else    schedule 14.06.2016
comment
Не обман - они просто хотят добавить сетку. Мой вопрос отличается тем, что я хочу добавить сетку в фоновом режиме и с линиями с произвольным интервалом.   -  person Everyone_Else    schedule 14.06.2016
comment
Также может быть дубликатом этого: линия сетки, соответствующая делениям на оси. Это тоже связано: как я рисую линии сетки, используя abline, которые находятся за данными. Обязательно взгляните на аргумент panel.first для plot.default. Эти связанные вопросы и ответы о построении пользовательских линий сетки и построении линий сетки за данными должны позволить вам выработать решение.   -  person Jota    schedule 14.06.2016
comment
Они связаны, но не совсем отвечают тому, что я ищу.   -  person Everyone_Else    schedule 14.06.2016
comment
На самом деле, они связаны в том смысле, что все можно собрать вместе, чтобы найти решение, но ни одного из этих ответов самого по себе будет недостаточно. Из-за этого я был бы признателен за удаление флага обмана.   -  person Everyone_Else    schedule 14.06.2016
comment
Я думаю, что pch = 21, bg = "white" вам пригодится.   -  person cuttlefish44    schedule 14.06.2016


Ответы (1)


Это можно сделать следующим образом:

x = 1:10
y = 21:30
plot(x, y, yaxt="n", panel.first = c(abline(h = 21:30, col="grey")), pch=19)
axis(2, at=20:30, las=2)

Пользовательские интервалы можно указать, изменив то, что заполняет c в аргументе panel.first. Между тем, вызов оси добавляет метки. Наконец, это гарантирует, что линии сетки действительно находятся на заднем плане изображения.

Это изображение, созданное этим кодом: введите здесь описание изображения

person Everyone_Else    schedule 14.06.2016