R: изменить цвет фона сюжета только для определенной области (на основе значений x)

Как изменить цвет фона для сюжета, только для определенной области? Например, от x = 2 до x = 4?

Бонусный вопрос: возможно ли комбинировать координаты x и y? (например, от (1,2) до (3,4))?

Большое спасибо!

Ответ 1

Это может быть достигнуто путем размышления над сюжетом несколько иначе, чем с вашим описанием. В принципе, вы хотите нарисовать цветной прямоугольник между желаемыми положениями по оси x, заполняя весь диапазон предельных значений оси Y. Это может быть достигнуто с помощью rect() и обратите внимание, как в приведенном ниже примере я захватываю координаты пользователя (usr) текущего графика, чтобы дать мне пределы по оси y и что мы выходим за эти пределы до убедитесь, что полный диапазон включен в график.

plot(1:10, 1:10, type = "n", axes = FALSE) ## no axes
lim <- par("usr")
rect(2, lim[3]-1, 4, lim[4]+1, border = "red", col = "red")
axis(1) ## add axes back
axis(2)
box()   ## and the plot frame

rect() может рисовать последовательность прямоугольников, если мы предоставляем вектор координат, и он может легко обрабатывать случай для любых x, y координат вашего бонуса, но для последнего легче избежать ошибок, если вы начните с вектора координат X, а другой для координат Y, как показано ниже:

X <- c(1,3)
Y <- c(2,4)
plot(1:10, 1:10, type = "n", axes = FALSE) ## no axes
lim <- par("usr")
rect(X[1], Y[1], X[2], Y[2], border = "red", col = "red")
axis(1) ## add axes back
axis(2)
box()   ## and the plot frame

Вы можете так же легко получить данные, сколько у вас есть в бонусе:

botleft <- c(1,2)
topright <- c(3,4)
plot(1:10, 1:10, type = "n", axes = FALSE) ## no axes
lim <- par("usr")
rect(botleft[1], botleft[2], topright[1], topright[2], border = "red",
     col = "red")
axis(1) ## add axes back
axis(2)
box()   ## and the plot frame