【问题标题】:Change background color of R plot更改 R 绘图的背景颜色
【发布时间】:2011-08-29 22:56:41
【问题描述】:

好吧,假设我有以下情节。

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 可以做到这一点,但不确定我是否可以使用基本图形来做到这一点。

【问题讨论】:

    标签: r plot


    【解决方案1】:

    喜欢

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

    【讨论】:

    • 谢谢...但是使用 par 会更改设置。我只想在 barplot 函数中包含该选项。
    • @ATMathew 它会更改一个设备的设置——下次你 plot() 时,它将被重置为白色。
    • 请注意,当同时使用par(new = TRUE) 时,这不是最佳解决方案,因为bg 参数将自动设置new = FALSE
    • 这在每页有多个面板时不起作用。
    【解决方案2】:

    通过 Google 搜索 later 我们了解到,您可以按照 Owen 的说明设置整个绘图设备的背景颜色。如果您只想更改绘图区域,则必须执行该 R-Help 线程中概述的操作:

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

    barplot 函数有一个您可能需要使用的 add 参数。

    【讨论】:

    • 酷,这比让整个窗口都是蓝色的要好得多:)
    • 谢谢!我将它与散点图矩阵面板一起使用,它很漂亮。
    • 我知道这是一个古老的问题/答案,但遗憾的是它仍然相关。有没有更无缝的方式来实现这一点?绘制虚拟点然后告诉它不要绘制那些虚拟点然后添加真实点似乎有点笨拙。
    • @DChaps 分层绘图是base R 的工作原理。我建议只是习惯它。或者您可以切换到 ggplot2 之类的东西,这会带走一些控制以换取不那么冗长的绘图。
    【解决方案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)
    

    【讨论】:

    • 我喜欢使用polygon 的想法,但我完全不相信不使用par 会更好。使用par 方法,任何绘图的代码都是相同的,但是您必须根据您的数据进行调整,如果您设置xlim 或其他内容,请再次调整。
    【解决方案4】:

    我使用带有极宽垂直线的abline() 来填充绘图空间:

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

    您必须创建框架,然后是 ablines,然后绘制点,以便它们在顶部可见。如果需要,您甚至可以使用第二个 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")
    

    【讨论】:

      【解决方案5】:

      在将此线程中的信息与 R-help ?rect 结合后,我想出了这张用于昼夜节律数据的漂亮图表 (24h plot)。背景矩形的脚本是这样的:

      根脚本:

      >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 小时的日子。

      干杯,

      罗马里奥

      【讨论】:

        【解决方案6】:
        adjustcolor("blanchedalmond",alpha.f = 0.3)
        

        上述函数提供了一个颜色代码,它对应于输入颜色的透明版本(在这种情况下,输入颜色是“blanchedalmond”)。

        输入 alpha 值的范围为 0 到 1,0 表示完全透明,1 表示完全不透明。 (在这种情况下,给定 0.3 的 alpha 的“blanchedalmond”半透明鲱鱼的代码是“#FFEBCD4D”。请务必包含主题标签符号)。您可以使用 joran 在此线程前面提供的此功能将新的半透明颜色变为背景颜色:

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

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

        【讨论】: