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

Строка сетки, соответствующая тикам на оси

Я смущен, чтобы задавать этот простой вопрос, но несколько дней думал о том, как создать сюжет:

plot (x = 1:10, y = rnorm (10, 5, 2))
grid (10,10, lty = 6, col = "cornsilk2")

Я хочу расположить решетки прямо там, где обозначена ось, т.е. на 2, 4, 6, 8, 10 по оси x и аналогично 3, 4, 5, 6, 7, 8 по оси y.

enter image description here

Я хочу автоматизировать процесс, как всякий раз, когда размер графика изменяет изменения поведения ярлыков по умолчанию. См. Следующий график:

enter image description here

4b9b3361

Ответ 1

Из ?grid описания аргументов nx и ny:

При NULL по умолчанию сетка выравнивается с отметками меток на соответствующей оси по умолчанию (т.е. меток, вычисленных с помощью axTicks)

plot (x = 1:10, y = rnorm (10, 5, 2)) 
grid (NULL,NULL, lty = 6, col = "cornsilk2") 

Ответ 2

Для справки существует способ управления параметрами сетки и осей непосредственно из команды plot(), если мы не определяем пользовательский интервал тика:

plot(x = 1:10, y = rnorm(10, 5, 2), xlim=c(1, 10), ylim=c(1, 10), panel.first=grid())

В документации plot.default() содержится больше информации об этих параметрах.

При использовании пользовательского интервала тиков наиболее простым является рисование сетки с помощью abline:

plot(x = 1:10, y = rnorm(10, 5, 2), xaxp=c(1, 10, 10), yaxp=c(1, 10, 10), axes=FALSE)
axis(1, 1:10)
axis(2, 1:10)
abline(h=1:10, v=1:10, col="gray", lty=3)

grid example

Подробнее о пользовательских интервалах тика в этой теме и здесь для выравнивания сетки.

Ответ 3

Для потомков вот длинный способ сделать это вручную:

plot (x = 1:10, y = rnorm (10, 5, 2))
grid (lty = 6, col = "cornsilk2")

xaxp <- par("xaxp")
yaxp <- par("yaxp")

abline(v=seq(xaxp[1], xaxp[2], (xaxp[2]-xaxp[1])/xaxp[3]), lty=6, col = "cornsilk2")
abline(h=seq(yaxp[1], yaxp[2], (yaxp[2]-yaxp[1])/yaxp[3]), lty=6, col = "cornsilk2")

Ответ 4

Ответ, представленный здесь, гораздо более прост, хотя вам может не нравиться отсутствие "свободного пространства" на каждом конце осей. Вкратце,

Проблема в том, что сетка помещает линии сетки nx в пользовательское пространство, но график добавляет дополнительное пространство на 4% с каждой стороны. Вы можете взять это под контроль. Добавление xaxs="i", yaxs="i" к вашему сюжету отключит дополнительное пространство. Но тогда ваша верхняя правая точка будет обрезана, поэтому вам нужно изменить значения xlim и ylim и изменить nx для соответствия