ggplot中是否有R函数将绘图限制为最大数据范围?

时间:2019-11-24 01:06:41

标签: r ggplot2

奇怪的问题,但是我似乎找不到一种整齐的方法来管理它!我在R中制作了许多科学图形,每个图形都有一大堆图(通过ggplot2)叠加在一起(用plot_grid),并沿同一x轴匹配。到目前为止一切顺利,我几乎准备导出并完善Illustrator中的所有图形。

最后一步是对每个图施加限制,以使堆栈中每个图之间的空间尽可能窄。我已经通过以下方式以第一步通过了:

test1<-ggplot(mtcars, aes(mpg, hp)) + 
  geom_line() +
  theme(plot.margin = unit(c(0, 0, 0, 0), "cm"),
        axis.line.y.right = element_line(colour = "black", size=1), 
        axis.line.y.left = element_line(colour = "black", size=1),
        axis.ticks.y.right = element_blank(),
        axis.text.y.right = element_blank(),        
        axis.title.x = element_blank(),    
        axis.ticks.x = element_blank(),    
        axis.line.x.bottom = element_blank(),    
        axis.text.x =element_blank(),
        axis.line = element_line(colour = "black", size =1),)

test2<-ggplot(mtcars, aes(mpg, drat)) + 
  geom_line() +
  theme(plot.margin = unit(c(0, 0, 0, 0), "cm"),
        axis.line.y.right = element_line(colour = "black", size=1), 
        axis.line.y.left = element_line(colour = "black", size=1),
        axis.ticks.y.right = element_blank(),
        axis.text.y.right = element_blank(),        
        axis.title.x = element_blank(),    
        axis.ticks.x = element_blank(),    
        axis.line.x.bottom = element_blank(),    
        axis.text.x =element_blank(),
        axis.line = element_line(colour = "black", size =1),)

test3<-ggplot(mtcars, aes(mpg, wt)) + 
  geom_line() + 
  theme(plot.margin = unit(c(0, 0, 0, 0), "cm"),
                      axis.line.y.right = element_line(colour = "black", size=1), 
                      axis.line.y.left = element_line(colour = "black", size=1),
                      axis.ticks.y.right = element_blank(),
                      axis.text.y.right = element_blank(),        
                      axis.title.x = element_blank(),    
                      axis.ticks.x = element_blank(),    
                      axis.line.x.bottom = element_blank(),    
                      axis.text.x =element_blank(),
                      axis.line = element_line(colour = "black", size =1),)

test<- plot_grid(test1, test2, test3, ncol=1, align="v", rel_heights = c(1,1,1))
test

看起来就像我在主题位上所做的一样。不确定-但会有所帮助!

2 个答案:

答案 0 :(得分:1)

如果要使图块之间没有间距堆叠,则需要在plot.margin调用中使用theme值进行游戏。您可以分配负值和其他单位。因此,类似这样的事情可以满足您的要求:

library(ggplot2)
library(cowplot)
#> 
#> ********************************************************
#> Note: As of version 1.0.0, cowplot does not change the
#>   default ggplot2 theme anymore. To recover the previous
#>   behavior, execute:
#>   theme_set(theme_cowplot())
#> ********************************************************

my_theme <- theme(
  plot.margin = unit(c(0, 0, -0.3, 0), "lines"),
  axis.title.x = element_blank(),    
  # axis.line = element_line(colour = "black", size =1),
  axis.line.y.right = element_line(colour = "black", size=1), 
  axis.line.y.left = element_line(colour = "black", size=1),
  axis.line.x.bottom = element_blank(),
  # axis.ticks.y.right = element_blank(),
  # axis.ticks.x = element_blank(),    
  # axis.text.y.right = element_blank(),        
  axis.text.x =element_blank(),
)

test1<-ggplot(mtcars, aes(mpg, hp)) + 
  geom_line() +
  my_theme

test2<-ggplot(mtcars, aes(mpg, drat)) + 
  geom_line() +
  my_theme

test3<-ggplot(mtcars, aes(mpg, wt)) + 
  geom_line() + 
  my_theme

test<- plot_grid(test1, test2, test3, ncol=1, align="v", rel_heights = c(1,1,1))
test

reprex package(v0.3.0)于2019-11-24创建

只需使用plot.margin底部或顶部边距来获得所需的内容。 此外,至少在提供的示例中,我评论了主题调用的某些行,因为它们不必要。如有需要,请随时取消注释。

答案 1 :(得分:0)

不是很了解这个问题,您需要发布一个可复制的示例。

您在问如何限制轴范围吗?如果是这样

+ scale_x_continuous(limits = c(0, 1))

将调整x轴范围。与y相似的功能。只需调整0,1。将其添加到网格中的每个图上。

更新:

gglist <- lapply(gglist, function(x) x + scale_x_continuous(limits = c(0, 1)) )