Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 删除ggplot2中x轴的空行_R_Ggplot2_Facet Wrap - Fatal编程技术网

R 删除ggplot2中x轴的空行

R 删除ggplot2中x轴的空行,r,ggplot2,facet-wrap,R,Ggplot2,Facet Wrap,我在删除x轴值之间的空格时遇到了一些问题。 我想消除每个facet\u wrap 我查过这篇文章 而这一次却毫无帮助 这是我的一个可复制的例子 set.seed(123) library(ggplot2) x <- rep(c(seq(2,40,length.out=8),seq(-2,-40,length.out=8)),times=1); yy <- replicate(1,c(sort(10^runif(8,-9,1),decreasing=TRUE), sort(10^r

我在删除x轴值之间的空格时遇到了一些问题。 我想消除每个
facet\u wrap

我查过这篇文章 而这一次却毫无帮助

这是我的一个可复制的例子

set.seed(123)
library(ggplot2)

x <-  rep(c(seq(2,40,length.out=8),seq(-2,-40,length.out=8)),times=1);
yy <- replicate(1,c(sort(10^runif(8,-9,1),decreasing=TRUE), sort(10^runif(8,-6,1),decreasing=TRUE),sort(10^runif(8,-3,0),decreasing=TRUE)))
direc <- rep(rep(c("A","B"),each=8),times=6)
add <-rep(seq(1:4),each=12)
df <- data.frame(x,yy,direc,add)

ggplot(data = df, aes(x = x, y = yy, colour=direc)) +
  geom_point(size=5)+
  geom_line(size=1.3)+
  scale_y_log10(limits = c(1e-7,1),breaks = c(3e-7,1e-3,1e-1,1))+
  scale_x_continuous(expand = c(0, 0),breaks=c(seq(-40,40,10)))+
  #scale_x_discrete(expand=c(0,0),drop=F)+
  #facet_grid(FIELD.Oe. ~ WER)+
  facet_wrap(~add)
set.seed(123)
图书馆(GG2)

x如果将
direc
转换为具有
c('B','a')
级别的因子(用
B
在左侧排列面)

嗯,一个把戏,;希望这就是你想要的:


在这种安排下,
color
参数在技术上也是不必要的,尽管它不会引起任何问题。我还取出了
scale\u x\u continuous
,因为它被
scales='free'
覆盖我对@alistaire有类似的想法,但无法让
ggplot
放弃足够的控制,所以我选择了
cowplot::plot\u grid()

我通过手动创建顺序重新排列了因子,在
A
之前出现
B

df$facet_order <- factor(paste0(df$direc,df$add), levels=c("B1", "A1", "B2", "A2", "B3", "A3", "B4", "A4"))

根据您所追求的输出大小,您可以将
size
参数与
plot\u grid
混在一起,并使
x=0
标签完全重叠,以便数据线完全对齐


我的建议(在没有简单地不这样做的情况下)是对
add
的所有值执行此操作,以便您可以手动移动相对x轴,从而使它们中的任何一个都没有间隙。

我看不出有任何理由删除间隙。或者你需要第三个因素。@Pascal在我的真实数据中,这个差距要大得多,这使得每个
方面都有很大的空间。[然后你必须在x轴上引入一个中断。你在找这个吗?@Pascal是的。类似的。实际上我试过了,但是如果你有很多
添加
值,它看起来很奇怪。垂直轴上的面变窄了。你可以将绘图大小设置为更高,面将更方。好吧,这取决于绘图的位置如果你想让整个情节更为方正的话,你可能需要把它分成多列。我认为
限制
参数切出的点以某种方式被添加到了这里。无论如何,还有其他方法可以把它们去掉,但是如果其他人真的不明白为什么B1和A3会这样这里有4个点,这就是为什么。我更改了限制,使点显示出来,看起来更漂亮。
coord_cartesian
是设置限制的更好方法,因为它不会删除绘图区域以外的点。
ggplot(data = df, aes(x = x, y = yy, colour = direc)) +
  geom_point(size=5)+
  geom_line(size=1.3)+
  scale_y_log10(limits = c(1e-7,1),breaks = c(3e-7,1e-3,1e-1,1))+
  facet_grid(add ~ direc, scales = 'free')
df$facet_order <- factor(paste0(df$direc,df$add), levels=c("B1", "A1", "B2", "A2", "B3", "A3", "B4", "A4"))
g1 <- ggplot(data=df[df$direc=="B",], aes(x=x, y=yy)) +
  geom_point(size=5, col="red") +
  geom_line(size=1.3, col="red") +
  scale_y_log10(limits=c(1e-8,10), breaks = c(3e-7,1e-3,1e-1,1)) +
  scale_x_continuous(expand = c(0, 0),breaks=c(seq(-40,40,10))) +
  facet_wrap(~facet_order, ncol=1) +
  coord_cartesian(xlim=c(-50,0)) + theme(axis.line.x=element_line(colour="red", size=1.5),
                                         legend.position="none")
g2 <- ggplot(data=df[df$direc=="A",], aes(x=x, y=yy)) +
  geom_point(size=5, col="blue") +
  geom_line(size=1.3, col="blue") +
  scale_y_log10(limits=c(1e-8,10), breaks = c(3e-7,1e-3,1e-1,1)) +
  scale_x_continuous(expand = c(0, 0),breaks=c(seq(-40,40,10))) +
  facet_wrap(~facet_order, ncol=1) +
  coord_cartesian(xlim=c(0,50)) + theme(axis.text.y=element_blank(),
                                        axis.line.y=element_blank(),
                                        axis.ticks.y=element_blank(),
                                        axis.title.y=element_blank(), 
                                        axis.line.x=element_line(colour="blue", size=1.5),
                                        legend.position="none")
library(cowplot)
g <- plot_grid(g1,g2,scale=1.05)
g