我经常有刻面的数值.我希望提供足够的信息来解释补充标题中的这些分面值,类似于轴标题.贴标签选项重复了许多不必要的文本,并且对于较长的变量标题不可用.
有什么建议?
默认值:
test<-data.frame(x=1:20, y=21:40, facet.a=rep(c(1,2),10), facet.b=rep(c(1,2), each=20))
qplot(data=test, x=x, y=y, facets=facet.b~facet.a)
Run Code Online (Sandbox Code Playgroud)

我想要的是:

我能在ggplot中做得最好:
qplot(data=test, x=x, y=y)+facet_grid(facet.b~facet.a, labeller=label_both)
Run Code Online (Sandbox Code Playgroud)

如@Hendy所示,类似于: 在ggplot2图中添加辅助y轴 - 使其完美
在具有多个构面变量的图中,ggplot2重复"外部"变量的构面标签,而不是在"内部"变量的所有级别上具有单个跨越构面条带.我有一直在使用,以覆盖与使用单个跨越小面条重复外端面标签一些代码gtable_add_grob从gtable包.
不幸的是,由于facet strip的grob结构发生了变化,此代码不再适用于ggplot2 2.2.0.具体来说,在ggplot2的早期版本中,facet标签的每一行都有自己的一组grob.但是,在版本2.2.0中,看起来每个facet标签的垂直堆栈都是单个grob.这打破了我的代码,我不知道如何解决它.
这是一个具体的例子,取自几个月前我回答的SO问题:
# Data
df = structure(list(location = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L), .Label = c("SF", "SS"), class = "factor"), species = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, …Run Code Online (Sandbox Code Playgroud) 我的热图继续变得越来越复杂.融化数据的一个示例:
head(df2)
Class Subclass Family variable value
1 A chemosensory family_1005117 caenorhabditis_elegans 10
2 A chemosensory family_1011230 caenorhabditis_elegans 4
3 A chemosensory family_1022539 caenorhabditis_elegans 10
4 A other family_1025293 caenorhabditis_elegans NA
5 A chemosensory family_1031345 caenorhabditis_elegans 10
6 A chemosensory family_1033309 caenorhabditis_elegans 10
tail(df2)
Class Subclass Family variable value
6496 C class c family_455391 trichuris_muris 1
6497 C class c family_812893 trichuris_muris NA
6498 F class f family_225491 trichuris_muris 1
6499 F class f family_236822 trichuris_muris 1
6500 F class …Run Code Online (Sandbox Code Playgroud) 我喜欢JMP可变性图。(链接)这是一个强大的工具。
该示例的示例具有2个x轴标签,一个用于部件号,一个用于操作员。

在这里,JMP变异图显示了两个以上级别的变量。以下按油量,批量和爆米花类型划分。找到正确的序列以显示最强的分离可能需要花费一些工作,但这是信息交流的绝佳工具。

使用ggplot2库,如何用R使用多层x标签?
我能找到的最好的是这个(link,link),它根据圆柱数分开,但是不做x轴标签。
我的示例代码是这样的:
#reproducible
set.seed(2372064)
#data (I'm used to reading my own, not using built-in)
data(mtcars)
attach(mtcars)
#impose factors as factors
fact_idx <- c(2,8:11)
for(i in fact_idx){
mtcars[,i] <- as.factor(mtcars[,i])
}
#boxplot
p <- ggplot(mtcars, aes(gear, mpg, fill=cyl)) +
geom_boxplot(notch = TRUE)
p
Run Code Online (Sandbox Code Playgroud)
这给出的图是:
如何使x轴标签同时显示齿轮和气缸?
当我在我的一个维度上有多个变量时,我试图获得一个很好的显示,这样我facet_grid就不会重复每个列(或行)的所有变量的名称,而是在子框上有一个合并的框.使用R中的默认数据集(基于R Cookbook)的具体示例:
library(reshape2)
sp <- ggplot(tips, aes(x=total_bill, y=tip/total_bill)) +
geom_point(shape=1) +
facet_grid(smoker ~ sex+day)
sp
Run Code Online (Sandbox Code Playgroud)
这将返回类似于此图的顶部部分,其中Female/Male在每列的顶部重复.是否有一种方法(在R中)合并所有性别块以获得类似我上传的图的底部部分?(我和Gimp做了这个,不用说它不是一个理想的选择)

我查阅了文档,facet_grid感觉解决方案就是创建一个新的贴标机功能,但我对R来说太新了,无法继续使用它.我已经搜索了一下,看看是否有人已经解决了这个问题,但似乎没有找到任何答案.
有没有人知道已经为此目的创建的自定义贴标机功能,或者是否有人知道如何创建这样的自定义贴标机功能?那真是太神奇了.
我试图在两个相邻面板上组合刻面条(总是有两个相邻面板具有相同的第一个 ID 变量,但有两种不同的场景,我们称它们为“A”和“B”)。我并不特别拘泥于gtable+grid解决方案,我试过了,但遗憾的是我不能使用facet_nested()从ggh4x包(我不能我公司的安装在服务器上,由于已经到位的各种限制和所需的依赖-我看着只使用相关的代码,但由于依赖关系,这也不容易)。
我希望通过组合顶部刻面条来指示哪些面板“属于一起”,从而使基本图的最小可行示例更易于阅读,如下所示:
library(tidyverse)
library(gtable)
library(grid)
idx = 1:16
p1 = expand_grid(id=idx, id2=c("A", "B"), x=1:10) %>%
mutate(y=rnorm(n=n())) %>%
ggplot(aes(x=x,y=y)) +
geom_jitter() +
facet_wrap(~id + id2, nrow = 4, ncol=8)
Run Code Online (Sandbox Code Playgroud)
带有“1”的条带、带有“2”的条带等应该组合在一起(实际上它是一个稍长的文本,但这只是为了说明)。我试图为类似的情况调整答案(/sf/answers/2822131931/ - 谢谢@markus 再次找到它),但这就是我尝试过的。正如你在下面看到的,我生产的高度似乎是错误的。我认为这一定是我忽略/不理解的一些微不足道的事情。
# Combine strips for a ID
g <- ggplot_gtable(ggplot_build(p1))
strip <- gtable_filter(g, "strip-t", trim = FALSE)
stript <- which(grepl('strip-t', g$layout$name))
stript2 = stript[idx*2-1]
top <- strip$layout$t[idx*2-1]
# # Using the $b below instead of b = top[i]+1, …Run Code Online (Sandbox Code Playgroud) 我创建了一个图表,ggplot里面有两个变量facet_grid。
我希望每个方面的标题仅在该方面的中心重复一次。
例如,第一个原始(上面)中的 0 和 1 将只出现一次并且出现在中间。
在我原来的情节中,每个方面的情节数量不相等。因此,使用两个地块拼凑patchwork/ cowplot/ggpubr不能很好地工作。
我更喜欢只使用ggplot.
样本数据:
df <- head(mtcars, 5)
Run Code Online (Sandbox Code Playgroud)
示例图:
df %>%
ggplot(aes(gear, disp)) +
geom_bar(stat = "identity") +
facet_grid(~am + carb,
space = "free_x",
scales = "free_x") +
ggplot2::theme(
panel.spacing.x = unit(0,"cm"),
axis.ticks.length=unit(.25, "cm"),
strip.placement = "outside",
legend.position = "top",
legend.justification = "center",
legend.direction = "horizontal",
legend.key.size = ggplot2::unit(1.5, "lines"),
# switch off the rectangle around symbols
legend.key = ggplot2::element_blank(),
legend.key.width = …Run Code Online (Sandbox Code Playgroud) 我有以下数据框:
ML Algorithm Option Coeff Lower Upper
1 Random Forest Algo_1 Opt_1 0.021 -0.124 0.166
2 Lasso Algo_1 Opt_1 0.130 -0.012 0.273
3 XGBoost Algo_1 Opt_1 -0.052 -0.211 0.108
4 Neural Net Algo_1 Opt_1 0.114 -0.009 0.238
5 Random Forest Algo_1 Opt_2 0.116 -0.033 0.264
6 Lasso Algo_1 Opt_2 0.158 0.019 0.297
7 XGBoost Algo_1 Opt_2 -0.260 -0.508 -0.012
8 Neural Net Algo_1 Opt_2 0.035 -0.100 0.170
9 Random Forest Algo_2 Opt_1 0.028 -0.117 0.172
10 Lasso Algo_2 Opt_1 0.134 …Run Code Online (Sandbox Code Playgroud)