我需要不同宽度的刻面;左图显示了一个实验的动态范围,右图显示了测试条件。2有没有办法让facet_wrap同时拥有自由的x和y尺度?3在facet_grid中是可能的,但即使scale=“free”,也有一个固定的y尺度。4 facet_wrap允许自由的y尺度,但x尺度似乎是固定的。5几年前,谷歌的一个页面上也贴出了同样的问题,但答案并不令人满意。
抱歉,如果这是一个重复在这里太;任何帮助都将不胜感激!
mdf <- read.table(text="
strain val type
1 1 0.0000 sample
2 1 0.0140 sample
3 1 0.0175 sample
4 2 0.0025 sample
5 2 0.0260 sample
6 2 0.0105 sample
7 3 0.0190 sample
8 3 0.0725 sample
9 3 0.0390 sample
10 4 0.0560 sample
11 4 0.0695 sample
12 4 0.0605 sample
13 5 0.0735 sample
14 5 0.1065 sample
15 5 0.0890 sample
16 6 0.1135 sample
17 6 0.2105 sample
18 6 0.1410 sample
19 7 0.1360 sample
20 7 0.2610 sample
21 7 0.1740 sample
22 8 0.3850 control
23 8 0.7580 control
24 8 0.5230 control
25 9 0.5230 control
26 9 0.5860 control
27 9 0.7240 control")
library(ggplot2)
p<-ggplot(mdf, aes(reorder(strain, val), val))+
labs(x="Strain", y="intensity")+
geom_boxplot()+
geom_point()+
facet_grid(~type, scales ="free", space="free_x")
p
## free x, fixed y. why?
q<-ggplot(mdf, aes(reorder(strain, val), val))+
labs(x="Strain", y="intensity")+
geom_boxplot()+
geom_point()+
facet_wrap(~type, scales ="free")
q
## free y, fixed x. why?
3条答案
按热度按时间wgx48brx1#
我不能绝对肯定,但我认为答案是否定的-使用ggplot 2命令。我也不认为这是一个好主意,因为对于读者来说,y轴上的刻度不同可能并不明显。不过,如果您必须要绘图,您可以使用ggplot grob布局调整q绘图面板的宽度。注意,第一个面板有两个x值,第二个面板有七个x值,因此将面板的默认宽度分别更改为2null和7 null。
编辑:更新到ggplot 2 2.2.0
或者,用R来确定相对宽度和面板。
ttygqcqt2#
另外,对于那些试图将@桑迪的答案与dplyr结合使用的人:
ehxuflar3#
这可以通过
ggh4x::facet_grid2
实现创建于2023年2月11日,使用reprex v2.0.2