【问题标题】:How to add different color shades in the background of a plot in R?如何在 R 中的绘图背景中添加不同的颜色阴影?
【发布时间】:2020-07-11 08:37:33
【问题描述】:

我想用不同的颜色为我的情节的不同部分着色。我尝试了以下方法:

boxplot(DEMAND~INTERVAL, data = NewData, main = "Box Plot for Each 15-minute Interval", xlab = "Interval", ylab = "Demand (kW)", col="dark grey", border = "black")
rect(0,0,44,1,col = rgb(0,1,0,1/15))
rect(44,0,56,1,col = rgb(1,1,0,1/15))
rect(56,0,76,1,col = rgb(1,0,0,1/15))
rect(76,0,92,1,col = rgb(1,1,0,1/15))
rect(92,0,96,1,col = rgb(0,1,0,1/15))

这会产生以下内容:

但是是否有可能使绘图使盒子和胡须显示在添加的矩形顶部?另外,如何确保整个地块都被覆盖,没有悬垂的白色区域?

【问题讨论】:

  • user23985723985,您知道 StackExchange 网站上的礼仪建议您应该 accept 回答您认为最好的答案吗?这样做不仅为回答者提供了一些积分,而且还为有类似问题的读者提供了一些关闭。尽管您只能接受一个答案,但您可以选择对您认为有帮助的人进行投票。 (如果仍有问题,您可能需要编辑您的问题并提供更多详细信息。)

标签: r plot boxplot


【解决方案1】:

这不是最优雅的,而是最简单的解决方案。

1) 要覆盖整个区域 - 不要从 0 开始矩形,让它们从低于 0 的 x 值和低于 0 的 y 值开始。

2) 要将箱线图放在图的前面,请在添加矩形后再次调用箱线图,使用add=TRUE

这是一个演示:

boxplot(weight ~ feed, data=chickwts)
rect(-1000, -1000, 1.5, 1000, col=adjustcolor("red", 0.1))
rect(1.5, -1000, 3.5, 1000, col=adjustcolor("orange", 0.1))
rect(3.5, -1000, 5.5, 1000, col=adjustcolor("blue", 0.1))
rect(5.5, -1000, 1000, 1000, col=adjustcolor("green", 0.1))
boxplot(weight ~ feed, data=chickwts, add=TRUE)

对于更优雅的解决方案:从一个空图开始,添加矩形,然后在末尾添加框。

colors <- c("red", "orange", "blue", "green")

plot.new()
plot.window(xlim=c(0.5, length(unique(chickwts$feed))+0.5), ylim=range(chickwts$weight))
rect(c(-1000,1.5,3.5,5.5), -1000, c(1.5,3.5,5.5,1000), 1000, col=adjustcolor(colors, 0.1))
boxplot(weight ~ feed, data=chickwts, add=TRUE)

这会给你同样的结果。

【讨论】:

  • 有没有办法让情节从最左边的盒子的左侧开始,而不仅仅是在白色区域着色?也就是说,我的情节从零开始
  • @user23985723985 为此 - 调整“xlim”参数。尝试使用xlim=c(1, ...) 而不是xlim=c(0.5, ...)
【解决方案2】:

由于您使用的是基础图形,您需要先创建一个空的plot,添加rectangles,然后绘制真实数据。

之前

boxplot(count ~ spray, data = InsectSprays, col = "lightgray")
rect(0.5,0,4,26, col = rgb(0,1,0,1/15))
rect(4,0,6.5,26, col = rgb(1,1,0,1/15))

之后

bp <- boxplot(count ~ spray, data = InsectSprays, plot = FALSE)
xrange <- c(1L, length(bp$names)) + c(-0.5, 0.5)
yrange <- range(bp$stats)
plot(NA, type = "n", xlim = xrange, ylim = yrange,
     xaxt = "n", xlab = NA, ylab = NA)
axis(1, at = seq_along(bp$names), labels = bp$names)
rect(0.5,0,4,26, col = rgb(0,1,0,1/15))
rect(4,0,6.5,26, col = rgb(1,1,0,1/15))
boxplot(count ~ spray, data = InsectSprays, col = "lightgray", add = TRUE)

(请注意,"lightgray" 填充在第二个图中没有着色。)

在这种情况下,我不会将数据绘制两次。第一次调用不会产生任何绘图,但会返回我们需要的数据(假设您需要以某种编程方式执行此操作)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 2018-11-30
    • 2017-12-06
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多