使图表的背景在不同区域不同颜色

Posted

技术标签:

【中文标题】使图表的背景在不同区域不同颜色【英文标题】:Make the background of a graph different colours in different regions 【发布时间】:2012-04-15 16:09:40 【问题描述】:

我正在使用 ggplot2 包在 R 中制作一个简单的条形图。而不是默认的灰色,我想将背景分成五个区域,每个区域都有不同(但同样低调)的颜色。我该怎么做?

更具体地说,我希望五个颜色区域从 0-25、25-45、45-65、65-85 和 85-100 开始,其中颜色代表劣于青铜、青铜、银色、分别是黄金和铂金。也非常欢迎提出配色方案的建议。

【问题讨论】:

我唯一能想到的就是创建一个剪切变量,剪切上的刻面并使用此问题中的技术编辑刻面grobs:***.com/questions/6750664/…跨度> 我可以在 ggplot2 邮件列表中找到我的建议示例:groups.google.com/forum/?fromgroups#!topic/ggplot2/fNBQrBPPbPM 尝试添加 geom_rect() 层,并使用您想要的填充和 Alpha 值。请注意,在此应用程序中,使用 +/- Inf 作为另一个方向的限制是很方便的。 感谢大家的回答/提示:我将在今天晚些时候尝试创建我想要的内容,然后接受适当的答案(或提出更多问题!)。 【参考方案1】:

下面是一个帮助您入门的示例:

#Fake data
dat <- data.frame(x = 1:100, y = cumsum(rnorm(100)))
#Breaks for background rectangles
rects <- data.frame(xstart = seq(0,80,20), xend = seq(20,100,20), col = letters[1:5])


#As Baptiste points out, the order of the geom's matters, so putting your data as last will 
#make sure that it is plotted "on top" of the background rectangles. Updated code, but
#did not update the JPEG...I think you'll get the point.

ggplot() + 
  geom_rect(data = rects, aes(xmin = xstart, xmax = xend, ymin = -Inf, ymax = Inf, fill = col), alpha = 0.4) +
  geom_line(data = dat, aes(x,y))

【讨论】:

直线下方的矩形可能会更好 @baptiste - 是的,好点。我没有考虑到这一点,匆忙将答案放在一起。我在上面合并了你的 cmets。谢谢! 谢谢!我现在基本上可以工作了。 (我认为,解决我剩下的问题只是让我更好地理解通过 ggplot 而不是 qplot 制作条形图。颜色/背景位工作正常。) 知道如何应用这个和facet_wrap()吗? 对于这些图,我想添加scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0)) 以删除矩形和轴之间的额外空间。我觉得它更美观。【参考方案2】:

我想按照上面baptiste 的建议将直线或直方图的条形移动到前景,并使用以下方法修复背景 + theme(panel.background = element_rect(), panel.grid.major = element_line( colour = "white") ),不幸的是我只能通过发送geom_bar 两次来做到这一点,希望有人可以改进代码并完成答案。

background <- data.frame(lower = seq( 0  , 3  , 1.5 ), 
                         upper = seq( 1.5, 4.5, 1.5 ),
                         col = letters[1:3])
ggplot() + 
    geom_bar( data = mtcars , aes( factor(cyl) ) ) + 
    geom_rect( data = background , 
              mapping = aes( xmin = lower , 
                            xmax = upper ,
                            ymin = 0 ,
                            ymax = 14 ,
                            fill = col ) ,
              alpha = .5 ) + 
    geom_bar(data = mtcars,
             aes(factor(cyl))) +
             theme(panel.background = element_rect(),
                   panel.grid.major = element_line( colour = "white"))

产生这个,

查看this site 以获取配色方案建议。

【讨论】:

感谢配色方案建议;这看起来很有希望:kuler.adobe.com/#themeID/611036【参考方案3】:

由于您在垂直(或水平)区域突出显示之后,geom_rect() 可能是一个过冲。请考虑使用geom_ribbon()

ggplot(mtcars, aes(x = wt, y = mpg)) + 
  geom_point() +
  geom_ribbon(aes(xmin=3, xmax=4.2), alpha=0.25) +
  theme_minimal()

【讨论】:

以上是关于使图表的背景在不同区域不同颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何在Google图表库的刻度区域网格中显示颜色

echarts实践-图表划分区域并设置不同颜色

加载时的 AnyChart 背景颜色

图表区域背景颜色chartjs

带有反应原生图表套件的不同颜色折线图

谷歌图表背景颜色