Строка сетки, соответствующая тикам на оси
Я смущен, чтобы задавать этот простой вопрос, но несколько дней думал о том, как создать сюжет:
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]()
Ответы
Ответ 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 для соответствия