【问题标题】:Change facet label text and background colour更改构面标签文本和背景颜色
【发布时间】:2017-01-13 09:56:45
【问题描述】:

如何将灰色构面标签(A 和 B)更改为带有白色文本的红色背景?

library(data.table)
A = data.table(x = 1:4, y = 1:4, z = c('A','A','B','B'))
ggplot(A) + geom_point(aes(x = x, y = y)) + facet_wrap(~z) + theme_bw()

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    你可以这样做:

    ggplot(A) +
      geom_point(aes(x = x, y = y)) +
      facet_wrap(~z) +
      theme_bw()+
      theme(strip.background =element_rect(fill="red"))+
      theme(strip.text = element_text(colour = 'white'))
    

    【讨论】:

    • 是否可以只更改一个标签的颜色?假设我有 5 列,我想突出显示中间的那一列。
    • @Sergio;我已经有一段时间没有玩 ggplot 了,因此我无法给出正确的答案,抱歉。我可以建议你研究一下 grob 编辑(警告:乏味),这个answer 可能会给你一些灵感。可能有一些更简单的解决方案。
    【解决方案2】:

    对于其他希望更改单个方面标签的人,有一个解决方案here

    g <- ggplot_gtable(ggplot_build(p))
    stripr <- which(grepl('strip-r', g$layout$name))
    fills <- c("red","green","blue","yellow")
    k <- 1
    for (i in stripr) {
      j <- which(grepl('rect', g$grobs[[i]]$grobs[[1]]$childrenOrder))
      g$grobs[[i]]$grobs[[1]]$children[[j]]$gp$fill <- fills[k]
      k <- k+1
    }
    grid::grid.draw(g)
    

    【讨论】:

    • 我正在使用最新版本的 R 并且这不起作用。我收到错误Error in *tmp*[[j]] : attempt to select less than one element in get1index。有什么想法吗?
    • 1.我正在使用 R v. 3.6.1,看起来某些绘图组件的名称已更改。为了重新创建相同的情节,我将上面的第 2 行和第 3 行更改为:striprt &lt;- which( grepl('strip-r', g$layout$name) | grepl('strip-t', g$layout$name) )fills &lt;- c("red","green","blue","yellow", "red","green","blue")(并将第 5 行中的 stripr 更改为 striprt。2. 随着最近对 R 的重大更新,可能即将推出对 ggplot 和网格包的更改也会改变事情。¯_(ツ)_/¯
    • 有没有办法在 ggplot 中原生地做到这一点?
    • @vashts85 我也一样。这是因为g$grobs[[i]]$grobs[[1]]$childrenOrder) 中没有包含'rect' 的任何内容供grepl 查找。
    • 以防万一其他人需要这个,对于我的新版本,我必须将 strip-r 更改为 strip-1,您可能需要先输入 g$layout$name 来查看您的特定情节这就是我如何意识到我的情节是 -1
    猜你喜欢
    • 1970-01-01
    • 2018-12-25
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-06
    相关资源
    最近更新 更多