在 ggplot2 中为单个面板更改文本颜色

5

我使用以下命令创建了下面的图表:

ggplot(long.data, aes(owner,value)) + stat_summary(fun.y=mean,geom="bar",
       fill=c("deepskyblue","deepskyblue4")) + 
       stat_summary(fun.data=mean_cl_normal,geom="errorbar",position=
       position_dodge(width=.90),width=.1) +
       labs(x="",y="") + facet_grid(IV~experiment+type,scales="free_y") + 
       theme(strip.text.y = element_text(colour = 'red4'))

如果我只想更改上部x轴(在此示例中为“Implicit”和“Explicit”级别)的文本颜色(可能还包括背景颜色),该怎么做?这是否可能?我在ggplot2文档中没有读到相关内容。
编辑:对于混淆造成的困惑,我想更改上部条形中的文本和背景颜色,而不是facet的颜色。 plot

在后台处理是完全可行的;请参见这个问题。通过添加颜色变量,可以类似地处理文本。 - SlowLearner
是的,在您发布的链接中,问题是更改整个图形的背景。我想要更改仅一个面板标签的文本颜色(以及背景)。 - this.is.not.a.nick
我已经完成了,我认为通过将我不想要着色的变量设置为“NULL”来实现。仔细阅读一下,你应该就能明白了。 - SlowLearner
@SlowLearner 我仔细阅读了帖子,但是没有发现解决方法。添加颜色变量对我没有用。基本上,我想要做的就是仅针对隐式/显式标签使用 strip.text.x=element_text(color="red"),而不是针对正文/对象标签。 - this.is.not.a.nick
很抱歉,我不明白您想要什么。您说您想要更改“上部x面”?如果不是面,那么您想要更改什么? - SlowLearner
抱歉,不是外观,而是两个上方条带之一的标签(以及可能的背景)。具体来说是隐式/显式条带。这可行吗? - this.is.not.a.nick
2个回答

6

您想要更改strip元素的属性,而不是facet。尝试使用以下代码。请注意,这是一个基于随机虚假数据的最小示例,因为您没有提供自己的数据供我们使用。您需要根据自己的需求调整代码。

require(reshape)
require(ggplot2)
require(scales)

# fake data
mydf <- data.frame(val1 = runif(10, 0, 1), val2 = runif(10, 0, 1))
mydf

# reshape to long format
long.data <- melt(mydf)
long.data$facetvar <- "implicit"
long.data$facetvar[seq(1, 19, 2)] <- "explicit"
long.data

# plot
ggplot(long.data, aes(y = value, x = variable)) +
    geom_bar(position = 'dodge', stat = "identity") +
    facet_wrap (~ facetvar) +
    theme(strip.background = element_rect(fill = alpha('green', 0.3))) +
    theme(strip.text.x = element_text(colour = 'blue', size = 10))

这会生成如下图所示的绘图: screenshot 请注意,您等待了相当长时间(根据Stack Overflow上R社区的标准),因为您的问题不够清晰,并且您没有提供完全可重现的代码和数据,使我们可以将其复制并粘贴到我们自己的R安装中。如果您这样做了,比我更有知识的某个人会在一小时内回答这个问题。请参阅此帖子以获取有关如何提问下一个问题的提示。

感谢您的回答。在我的情况下,我有两个上部条(因此有两个因素),我想仅更改其中一个的颜色。因此,条带Implicit/Explicit将是(比方说)红色,而条带Body/Objects将是(比方说)橙色。strip.text.x可以用于选择条带吗? - this.is.not.a.nick
1
我不知道。你试过了吗?由于我没有你的数据(或以与你真实数据相同的方式安排的“伪”数据),所以如果要进行实验,我需要进行很多猜测和不便。这是为什么你应该包括数据的经典例子。我的建议是尝试并观察。 - SlowLearner

4
我收到一个警告信息...但这似乎是一个更优雅的解决方案的好起点:

ggplot(mtcars) + geom_rect(data = subset(mtcars, cyl == 4), aes(fill = cyl),xmin = -inf,xmax = Inf, ymin = -Inf,ymax = Inf, alpha = 0.05) +
  geom_point(aes(mpg, wt)) +  facet_grid(. ~ cyl)

enter image description here


也许我在解释上不太清楚,对此我向您道歉。基本上,我的目标是使单词“隐式”和“显式”以(比如)红色的颜色显示,并且可能还要将相关背景颜色从灰色更改为(比如)橙色。 - this.is.not.a.nick
@this.is.not.a.nick 因为您已经为垂直标签做了这个(将它们变成红色),我想您想要一些不同的东西,但我还没有理解清楚,对此我感到抱歉。 - Michele

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