R: change background color of plot for specific area only (based on x-values)

前端 未结 1 832
清歌不尽
清歌不尽 2021-02-13 05:06

How do I change the background color for a plot, only for a specific area? For example, from x=2 to x=4?

Bonus question: is it also possible for a combination of x and y

相关标签:
1条回答
  • 2021-02-13 05:49

    This can be achieved by thinking about the plot somewhat differently to your description. Basically, you want to draw a coloured rectangle between the desired positions on the x-axis, filling the entire y-axis limit range. This can be achieved using rect(), and note how, in the example below, I grab the user (usr) coordinates of the current plot to give me the limits on the y-axis and that we draw beyond these limits to ensure the full range is covered in the plot.

    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() can draw a sequence of rectangles if we provide a vector of coordinates, and it can easily handle the case for the arbitrary x,y coordinates of your bonus, but for the latter it is easier to avoid mistakes if you start with a vector of X coordinates and another for the Y coordinates as below:

    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
    

    You could just as easily have the data as you have it in the bonus:

    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
    
    0 讨论(0)
提交回复
热议问题