修改R绘图的背景颜色

51

好的,假设我有以下的绘图。

df = data.frame(date=c(rep(2008:2013, by=1)),
                value=c(303,407,538,696,881,1094))

barplot(df$value, main="TITLE", col="gray", ylab="People", xlab="Years")

如何将背景更改为海军蓝?

我知道ggplot2可以实现,但不确定是否可以在基本图形中进行。

6个回答

63

喜欢

par(bg = 'blue')
# Now do plot

谢谢...但使用par会改变设置。我只想在barplot函数中包含该选项。 - ATMathew
@ATMathew 它会更改一个设备的设置 -- 下次你绘图()时,它将被重置回白色。 - Owen
1
请注意,当同时使用 par(new = TRUE) 时,这不是最佳解决方案,因为 bg 参数会自动设置 new = FALSE - fdetsch
1
当页面上有多个面板时,这种方法无法正常工作。 - Met
这就是它!非常感谢。 - display-name-is-missing

51

通过一次谷歌搜索,我们了解到您可以像Owen建议的那样设置整个绘图设备的背景颜色。如果您只想改变绘图区域,则必须执行类似于R-Help线程中所述的操作:

plot(df)
rect(par("usr")[1],par("usr")[3],par("usr")[2],par("usr")[4],col = "gray")
points(df)

barplot 函数有一个 add 参数,你很可能需要使用它。


酷,这比整个窗口都是蓝色要好多了 :) - Owen
谢谢!我正在与散点矩阵面板一起使用它,效果非常好。 - Jamison
我知道这是一个老问题/答案,但它仍然很相关。现在有更无缝的方法来完成这个任务吗?绘制虚拟点,然后告诉它不要绘制那些虚拟点,然后再添加真实点似乎有点笨拙。 - DChaps
@DChaps 绘制分层图是 base R 的工作方式。我建议你只是逐渐习惯它。或者你可以转向像 ggplot2 这样的东西,它会减少冗长的绘图并换取一些控制权。 - Frans Rodenburg

3

虽然这是一个旧问题,但我有一种更好的方法来解决它。不要使用rect()而是使用polygon。这样可以在不使用points的情况下将所有内容保留在plot中。而且你完全不需要去碰par。如果你想自动化处理,让polygon的坐标成为你数据的一个函数即可。

plot.new()
polygon(c(-min(df[,1])^2,-min(df[,1])^2,max(df[,1])^2,max(df[,1])^2),c(-min(df[,2])^2,max(df[,2])^2,max(df[,2])^2,-min(df[,2])^2), col="grey")
par(new=T)
plot(df)

1
我喜欢使用 polygon 的想法,但我并不完全相信不使用 par 更好。 使用 par 方法,对于任何绘图,代码都是相同的,但是这种方法需要根据数据进行调整,如果设置了 xlim 或其他参数,则需要再次进行调整。 - Gregor Thomas

2

我使用abline()函数来绘制极宽的垂直线以填充绘图空间:

abline(v = xpoints, col = "grey90", lwd = 80)

您需要先创建框架,然后绘制垂线,最后将点绘制在其上以使其可见。如果需要,您甚至可以使用第二个abline()语句在灰色线条上覆盖薄白色或黑色线条。

示例:

xpoints = 1:20
y = rnorm(20)
plot(NULL,ylim=c(-3,3),xlim=xpoints)
abline(v=xpoints,col="gray90",lwd=80)
abline(v=xpoints,col="white")
abline(h = 0, lty = 2) 
points(xpoints, y, pch = 16, cex = 1.2, col = "red")

1

结合本帖子和R-help的信息?rect,我得出了这个漂亮的昼夜节律数据图(24小时绘图)。背景矩形的脚本如下:

根脚本:

>rect(xleft, ybottom, xright, ytop, col = NA, border = NULL)

我的脚本:

>i <- 24*(0:8)
>rect(8+i, 1, 24+i, 130, col = "lightgrey", border=NA)
>rect(8+i, -10, 24+i, 0.1, col = "black", border=NA)

这个想法是用8小时光照和16小时黑暗来表示24小时的一天。

祝好,

Romário


0
adjustcolor("blanchedalmond",alpha.f = 0.3)

上述函数提供了一个颜色代码,该代码对应于输入颜色的透明版本(在本例中,输入颜色为“blanchedalmond”)。

输入alpha值的范围为0到1的比例尺,其中0表示完全透明,1表示完全不透明。 (在这种情况下,给定alpha为.3的半透明“blanchedalmond”的代码是“#FFEBCD4D”。请确保包括井号符号)。您可以使用此线程中joran提供的函数将新的半透明颜色变为背景颜色:

rect(par("usr")[1],par("usr")[3],par("usr")[2],par("usr")[4],col = "blanchedalmond")

通过使用半透明颜色,您可以确保在应用背景颜色后仍然可以看到图表的数据。希望这可以帮到您!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接