如何在 facet_wrap 中更改面板标签

8

我正在使用ggplot和facet_wrap来获取所需的图表。我需要在每个分面的标签、变量或每个分面的名称中添加一些内容,就像我们直接在ggplot下修改xlab和ylab一样。

示例:

d <- ggplot(diamonds, aes(carat, price, fill = ..density..)) +
  xlim(0, 2) + stat_binhex(na.rm = TRUE) + theme(aspect.ratio = 1)

d + facet_wrap(~ color)

enter image description here

现在我要做的是更改每个分面的标签,即将D、E、F、G、H、I和J更改为其他名称。

我该如何修改呢?

附加说明

很抱歉,我试图打破它,但这需要时间,所以我已经将其添加到了Github。您可以上传文件并检查结果。问题出在选项4 facet_wrap上...您可以选择单选按钮选项4.

我已经注释了先前我正在使用的facet_wrap,其中数据完整性良好,但是如果我更改facet wrap,则图形行为会有所不同,数据也会发生变化。

可以在“要上传的数据”文件夹中找到要上传的数据。

代码可以在这里找到:我一分钟后会添加这个。


facet_grid 相关的流行问题: https://dev59.com/7nA75IYBdhLWcg3wGlAa - IloveCatRPython
2个回答

9
尽管这是一个非常老的问题,我想回答它,因为我学到了一种简单的方法!这个解决方案是使用facet_wrap(),而且不会以任何方式改变你的数据。
text.on.each.panel <-"_new"
d <- ggplot(diamonds, aes(carat, price)) +
     xlim(0, 2) 
d + facet_wrap(~ color, labeller = label_bquote(.(color)-.(text.on.each.panel)))

6
根据我的了解,facet_grid 可能是这种情况下更好的解决方案。 facet_grid 不仅可以通过一个变量来分组绘图,还可以通过两个甚至更多的变量来分组,有一个名为labeller的参数,可用于自定义标签。
myfunction <- function(var, string) {
  print(var)
  print(string)
  result <- paste(as.character(string),'_new', sep="")
  return(result)
}

ggplot(diamonds, aes(carat, price, fill = ..density..)) + xlim(0, 2) + 
  stat_binhex(na.rm = TRUE) + theme(aspect.ratio = 1) + facet_grid(~color, labeller=myfunction, as.table=TRUE)

# OUTPUT
[1] "color"
[1] D E F G H I J
Levels: D < E < F < G < H < I < J

输入图像描述

然而,正如您所看到的,这个图形是在一行中的,即使您打开了as.table标志,也不认为它可以轻松地分成多行,基于这里

您认为如果添加一个专门用于标记的新列,这将可行吗?然后,您可以保留facet_wrap的优点...

diamonds$label <- paste(as.character(diamonds$color), "_new", sep="")
ggplot(diamonds, aes(carat, price, fill = ..density..)) + xlim(0, 2) + 
  stat_binhex(na.rm = TRUE) + theme(aspect.ratio = 1) + facet_wrap(~label)

enter image description here


这个程序运行得很好。但是我不知道为什么在我的数据集中它的表现很奇怪。如果我按照你的建议去做,那么值会重复,也就是说所有的方面都有相同的值。我已经将我的代码添加到问题中,请检查一下。 - cppiscute
我之前在向新标签命名时遇到了一个传递响应组件值的问题,但现在已经解决了。感谢您的出色答案。 - cppiscute

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