我和这个用户有同样的问题- 我有一个'锯齿状'刻面图,其中底行的面板比其他行少,我想在每列的底部有x轴刻度.
该问题的建议解决方案是设置scales="free_x".(在ggplot 0.9.2.1中;我相信我正在寻找的行为在早期版本中是默认的.)在我的情况下,这是一个糟糕的解决方案:我的实际轴标签会相当长,所以将它们放在每一行下会占用太多房间.结果是这样的:
x <- gl(3, 1, 15, labels=paste("this is a very long axis label ", letters[1:5]))
y <- rnorm(length(x))
l <- gl(5, 3, 15)
d <- data.frame(x=x, y=y, l=l)
ggplot(d, aes(x=x, y=y)) + geom_point() + facet_wrap(~l, scales="free_x") +
theme(axis.text.x=element_text(angle=90, hjust=1))
Run Code Online (Sandbox Code Playgroud)

在这里的评论中,Andrie建议可以手动完成,grid但我不知道如何开始.
使用ggplot2中的facet_wrap创建一个网格,但是我的面板数量不均匀,所以最后一行是不完整的.在最后一个底部,空白面板是轴刻度和文本.是否可以将此轴向上移动(为每列中的最后一个面提供应用free_x的外观)?如果没有,我可以完全删除它,如下所示?
为了澄清一些例子,这就是我得到的:http: //sape.inf.usi.ch/sites/default/files/ggplot2-facet-wrap.png

我希望在这里看到的东西(尽管理想情况下,在第4列的刻面上有轴标记): 在ggplot2中将facet标签更改为数学公式

感谢您的任何想法或见解!
ggplot2中的许多主题元素只有.x或.y扩展名,只能在一个轴上删除/修改某些内容. strip.background没有strip.background.x相同的,如下所示.
如何strip.background仅从一个轴上删除文本和构面标签?
a <- ggplot(mtcars, aes(mpg, hp)) +
geom_point() +
facet_grid(cyl~gear)
a + theme(strip.text.y = element_blank(),
strip.background.x = element_blank())
## > a + theme(strip.text.y = element_blank(), strip.background.x = element_blank())
## Error in (function (el, elname) :
## "strip.background.x" is not a valid theme element name.
Run Code Online (Sandbox Code Playgroud) 我遇到了困难ggplot2.我阅读了大部分相关帖子,尝试了一些但没有找到任何真正的解决方案.
我想在我的标签数学表达式facet_grids用ggplot2.
qplot(day, activity, data=a) +xlab(expression("100 µg "*.L^"-1"*""))::这很好用.我该如何处理facet_labels?我可以设置级别并重命名标签因子,但不考虑表达式,例如:
levels(a$group) <- c("control", expression("100 µg "*.L^"-1"*""))
qplot(…, facets=~group)
结果:
方面1的标签写在图表上:控制
方面2的标签写在图表上:"100μg" .L ^" - 1" ""......
我不希望这样.
我不想使用,facet_grid(.~group, labeller=label_bquote(…))因为我不希望我的所有标签都遵循相同的表达方式.我想手动逐个编辑标签...我尝试用bquote(…)而不是expression(…)但同样的坏结果发生了
有人对此有任何线索吗?
一个例子:我定义了一个数据帧:
activity<- as.numeric(c("44","41","48","43","42","45","44","39", "47", "68", "88", "57"))
group<-c("first","first","first","first","first","first",
"second","second","second","second","second","second")
day<- c("0", "0", "0", "20","20", "20","0", "0", "0", "20","20", "20" )
a<-data.frame(activity, group, day)
Run Code Online (Sandbox Code Playgroud)
我的情节:
require (ggplot2)
Run Code Online (Sandbox Code Playgroud)
qplot(day, activity, facets=.~group, data=a, ylim=c(25,90))
我想更改构面标签和y轴的名称:
levels(a$group)<- c("control", …Run Code Online (Sandbox Code Playgroud) 我有一个数据集,我想从中绘制小的倍数,特别是在2乘2的数组中,如下所示:
mydf <- data.frame(letter = factor(rep(c("A", "B", "C", "D"), each = 20)), x = rnorm(80), y = rnorm(80))
ggplot(mydf, aes(x = x, y = y)) + geom_smooth(method = "lm") + geom_point() + facet_wrap(~ letter, ncol = 2)
Run Code Online (Sandbox Code Playgroud)
但是,我希望每个构面标签都包含一个表达式,例如
expression(paste("A or ", alpha))
Run Code Online (Sandbox Code Playgroud)
我可以使用facet_grid()via 来实现这一点
f_names <- list('A' = expression(paste("A or ", alpha)), 'B' = expression(paste("B or ", beta)), 'C' = expression(paste("C or ", gamma)), 'D' = expression(paste("D or ", delta)))
f_labeller <- function(variable, value){return(f_names[value])}
ggplot(mydf, aes(x = x, …Run Code Online (Sandbox Code Playgroud) 我正在使用ggplot2创建一个boxplot.我能够成功创建boxplot但是在ggplot2中将两个要素与facet合并时遇到问题:
>tmpdf
value treat FoldChange Gene Pvalue.Adj
523.8589 Normal -1.899 A 0.02828
489.7638 Normal -1.899 A 0.02828
642.0126 Cancer -1.899 A 0.02828
928.8136 Cancer -1.899 A 0.02828
624.7892 Normal -1.899 A 0.02828
53.8685 Normal -7.135 B 0.00012
184.6473 Normal -7.135 B 0.00012
76.2712 Cancer -7.135 B 0.00012
48.0607 Cancer -7.135 B 0.00012
177.9528 Normal -7.135 B 0.00012
4581.2847 Normal -1.886 C 0.04924
7711.3411 Normal -1.886 C 0.04924
6007.9852 Cancer -1.886 C 0.04924
5940.9232 Cancer -1.886 C 0.04924
4433.0949 Normal -1.886 …Run Code Online (Sandbox Code Playgroud) 我正在创建一个图形facet_grid,用于在y轴上分割一个分类变量.我决定不使用,facet_wrap因为我需要space = 'free'和labeller = label_parsed.我的标签很长,右边有一个图例,所以我想将标签从面板右侧移动到面板顶部.
这是一个显示我陷入困境的例子.
library(ggplot2)
library(gtable)
mt <- ggplot(mpg, aes(x = cty, y = model)) + geom_point() +
facet_grid(manufacturer ~ ., scales = 'free', space = 'free') +
theme_minimal() +
theme(panel.margin = unit(0.5, 'lines'), strip.text.y = element_text(angle = 0))
Run Code Online (Sandbox Code Playgroud)

现在我想将条带文本从每个面板的右侧移动到每个面板的顶部.我可以存储条带标签的凹槽并将其从图中删除:
grob <- ggplotGrob(mt)
strips.y <- gtable_filter(grob, 'strip-right')
grob2 <- grob[,-5]
Run Code Online (Sandbox Code Playgroud)
但是现在我被困在rbind了 - 然后回到平板上,所以标签就到了面板的顶部.
另一种可能的解决方案是使用facet_wrap,然后重新大小的面板作为另一个问题讨论,但在这种情况下,我必须手动更改标签上的面,因为没有labeller = label_parsed了facet_wrap.
我对这两种方法的建议表示赞赏!
谢谢阅读,
汤姆
我需要用复杂的表达式替换一个 facet wrap 标签。但是,我无法再使用函数facet_wrap_labeller处理在较旧的 ggplot2 版本下创建的绘图。
data <- as.data.frame(matrix(rnorm(60),20,3))
data$factor <- c(rep("f1", 4),rep("f2", 4), rep("f3", 4), rep("f4",4),rep("f5", 4))
names(data) <- c("A", "B", "C", "factor")
melted <- melt(data)
p <- ggplot(melted, aes(variable, value)) +
stat_boxplot(geom ='errorbar') +
geom_boxplot()
p1 <- p + facet_wrap(~factor)
facet_wrap_labeller(p1, labels=c("A", "B", expression({}^2*italic(D)~textstyle(group("(", rarefied, ")")))))
Run Code Online (Sandbox Code Playgroud)
我得到:
Error in getGrob(gg[[strips[ii]]], "strip.text", grep = TRUE, global = TRUE) :
it is only valid to get a child from a "gTree"
Called from: getGrob(gg[[strips[ii]]], "strip.text", grep = TRUE, …Run Code Online (Sandbox Code Playgroud) 我需要使用ggplot2中的facet_wrap()将希腊字母放入facet标签中.我发现了一个描述facet_grid()的链接.我使用以下代码将其应用于我的数据:
levels(parameters) <- c(expression(alpha), expression(beta))
p + facet_grid(.~parameters, labeller = label_parsed)
Run Code Online (Sandbox Code Playgroud)
这很有效,完全符合我的要求.但是,我需要使用facet_wrap()(为两个参数获取单独的y轴,并在不同的列和行中绘制更多参数).我尝试了以下方法:
p + facet_wrap(.~parameters, labeller = label_parsed) , or
p + facet_wrap(.~parameters)
Run Code Online (Sandbox Code Playgroud)
但是这没有用,因为facet_wrap中没有"贴标机"功能.如何使用网格完成?
我想绘制一个图形来自定义带有表达式和普通字符串(包含空格)的条形文本,但当普通文本包含空格时出现错误。这是重现我的问题的示例:
library(ggplot2)
labels <- c("'FT'[1]*' - Ctrl'",
"'FT'[tot]*' - FT'[1]*''",
"'FT'[tot]*' - Ctrl'")
lbl_pd <- data.frame(impact = c('Direct impact', 'Direct impact',
'Indirect impact', 'Indirect impact'),
type = c(labels[1], labels[2], labels[1], labels[2]),
Latitude = -22.5, Longitude = 115,
label = c('a', 'b', 'c', 'd'))
p <- ggplot(lbl_pd)
p <- p + geom_text(aes(Longitude, Latitude, label = label), size = 2)
p <- p + facet_grid(type~impact, labeller = label_parsed)
p
Run Code Online (Sandbox Code Playgroud)
错误是
Error in parse(text = x) : <text>:1:8: unexpected symbol
1: Direct impact …Run Code Online (Sandbox Code Playgroud) 我试图用表达式替换条形图facet_wrap上的标题ggplot,但我没有运气。我在这里和这里都试过,但似乎都不适合我。
整个数据集相当大,所以这里有一些虚拟数据来说明问题。
library(tidyr)
library(ggplot2)
data<-data.frame(species = rep(c("oak", "elm", "ash"), each = 5),
resp_1 = (runif(15, 1,100)),
resp_2 = (runif(15, 1,100)),
resp_3 = (runif(15, 1,100)),
resp_4 = (runif(15, 1,100)),
resp_5 = (runif(15, 1,100)))
### transform to longform with tidyr
data_2 <- gather(data, response, result, resp_1:resp_5, factor_key=TRUE)
### plot with ggplot2
ggplot(data_2, aes(x = species, y = result, fill = species))+
geom_bar(stat = 'sum')+
facet_wrap(~ response)
### here are the labels I'd like to …Run Code Online (Sandbox Code Playgroud)