从ggplot2中的x轴删除空行
Remove blank lines from x axis in ggplot2
我在删除 x 轴值之间的 space 时遇到了一些麻烦。
我想消除每个 facet_wrap
中两个值之间的差距
我检查了这个post
/ggplot-geom-tile-spacing-with-facets and this one remove-blank-lines-from-plot-geom-tile-ggplot 但 scales=free_x
根本没有帮助。
这是我的一个可重现的例子
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)
我想消除 A
和 B
因素之间的差距。我需要的是从 x 轴上删除未使用的值。
如果将 direc
转换为水平 c('B', 'A')
的因子(以在左侧排列 B
的面),
df$direc <- factor(direc, levels = c("B", "A"))
只需将 facet_wrap
替换为 facet_grid
即可。
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')
嗯,一个技巧;希望这是你想要的:
colour
参数在技术上对于这种安排也是不必要的,尽管它不会导致任何问题。我也取出了 scale_x_continuous
,因为它被 scales = 'free'
覆盖了。
我和@alistaire 有类似的想法,但无法让 ggplot
放弃足够的控制权,所以我选择了 cowplot::plot_grid()
。
我通过手动创建顺序重新排列了因素,B
出现在 A
之前。
df$facet_order <- factor(paste0(df$direc,df$add), levels=c("B1", "A1", "B2", "A2", "B3", "A3", "B4", "A4"))
分别为 A
和 B
创建绘图,然后使用 plot_grid
;
组合它们
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
根据您之后的输出大小,您可以将 size
参数弄乱 plot_grid
并使 x=0
标签完全重叠,以便数据完美对齐.
我的建议(在没有简单地不这样做的情况下)是对 add
的所有值执行此操作,这样您就可以手动移动相对的 x 轴,这样就没有任何间隙其中
我在删除 x 轴值之间的 space 时遇到了一些麻烦。
我想消除每个 facet_wrap
我检查了这个post
/ggplot-geom-tile-spacing-with-facets and this one remove-blank-lines-from-plot-geom-tile-ggplot 但 scales=free_x
根本没有帮助。
这是我的一个可重现的例子
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)
我想消除 A
和 B
因素之间的差距。我需要的是从 x 轴上删除未使用的值。
如果将 direc
转换为水平 c('B', 'A')
的因子(以在左侧排列 B
的面),
df$direc <- factor(direc, levels = c("B", "A"))
只需将 facet_wrap
替换为 facet_grid
即可。
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')
嗯,一个技巧;希望这是你想要的:
colour
参数在技术上对于这种安排也是不必要的,尽管它不会导致任何问题。我也取出了 scale_x_continuous
,因为它被 scales = 'free'
覆盖了。
我和@alistaire 有类似的想法,但无法让 ggplot
放弃足够的控制权,所以我选择了 cowplot::plot_grid()
。
我通过手动创建顺序重新排列了因素,B
出现在 A
之前。
df$facet_order <- factor(paste0(df$direc,df$add), levels=c("B1", "A1", "B2", "A2", "B3", "A3", "B4", "A4"))
分别为 A
和 B
创建绘图,然后使用 plot_grid
;
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
根据您之后的输出大小,您可以将 size
参数弄乱 plot_grid
并使 x=0
标签完全重叠,以便数据完美对齐.
我的建议(在没有简单地不这样做的情况下)是对 add
的所有值执行此操作,这样您就可以手动移动相对的 x 轴,这样就没有任何间隙其中