【问题标题】:Pasting ggplot objects horizontally水平粘贴ggplot对象
【发布时间】:2021-04-15 20:59:15
【问题描述】:

我正在尝试将 16 个不同的图粘贴到一个具有公共 x 轴的图中

我成功地使用 grid.draw() 分别制作、绘制和粘贴图表

但我无法以连续的方式转换 x 轴,或者至少移除每个图形之间的空间

我附上一些代码来说明图表是如何制作的。

plot1 = ggplot(map_snp %>% filter( chr == chr[1] ), aes(x=POS)) + 
  geom_histogram( binwidth = 2,
                  col=palette[2],
                  fill=palette[2],
                  alpha = .2) +
  xlab("Chromosome 1") +
  ylab("SNP count") +
  theme_bw() +
  theme(axis.text.x = element_text(angle = 0, colour = "black"),
        text=element_text(family="Times New Roman", size = 12),
        panel.border = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        axis.line.y = element_line(colour = "black"),
        axis.line.x = element_line(colour = "black"))

par_plots <- list() 
for (i in list_par) {
  par_plots[[i]] = ggplot(map_snp %>% filter( chr == i ), aes(x=POS)) + 
    geom_histogram( binwidth = 2,
                    col= palette[3],
                    fill= palette[3],
                    alpha = .2) +
    xlab(paste0(i)) +
    theme_bw() +
    theme(axis.text.x = element_text(angle = 0, colour = "black"),
          text=element_text(family="Times New Roman", size = 12),
          panel.border = element_blank(),
          panel.grid.major = element_blank(),
          panel.grid.minor = element_blank(),
          axis.line.y = element_blank(),
          axis.title.y = element_blank(),
          axis.text.y = element_blank(),
          axis.ticks.y = element_blank(),
          axis.line.x = element_line(colour = "black"))
}
impar_plots <- list()
for (i in list_impar) {
impar_plots[[i]] = ggplot(map_snp %>% filter( chr == i ), aes(x=POS)) + 
    geom_histogram( binwidth = 2,
                    col= palette[2],
                    fill=palette[2],
                    alpha = .2) +
  xlab(paste0(i)) +
  theme_bw() +
  theme(axis.text.x = element_text(angle = 0, colour = "black"),
        text=element_text(family="Times New Roman", size = 12),
        panel.border = element_blank(),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        axis.line.y = element_blank(),
        axis.title.y = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank(),
        axis.line.x = element_line(colour = "black"))
}

grid.newpage()
png(paste("./snp_map.png"),  width = 15*4.5, height = 8, res = 320, units = "cm", pointsize = 12, bg = "white")
grid.draw(cbind(ggplotGrob(plot1),
                ggplotGrob(par_plots$`Chromosome 2`),
                ggplotGrob(impar_plots$`Chromosome 3`),
                ggplotGrob(par_plots$`Chromosome 4`),
                ggplotGrob(impar_plots$`Chromosome 5`),
                ggplotGrob(par_plots$`Chromosome 6`),
                ggplotGrob(impar_plots$`Chromosome 7`),
                ggplotGrob(par_plots$`Chromosome 8`),
                ggplotGrob(impar_plots$`Chromosome 9`),
                ggplotGrob(par_plots$`Chromosome 10`),
                ggplotGrob(impar_plots$`Chromosome 11`),
                ggplotGrob(par_plots$`Chromosome 12`),
                ggplotGrob(impar_plots$`Chromosome 13`),
                ggplotGrob(par_plots$`Chromosome 14`),
                ggplotGrob(impar_plots$`Chromosome 15`),
                ggplotGrob(par_plots$`Chromosome 16`),
                size = "last"))

dev.off()

单核苷酸多态性映射

【问题讨论】:

  • 您希望如何转换您的 x 轴?它看起来已经是连续的,并且对于您到目前为止所做的事情,似乎可以通过facet_wrap() 复制它。您能否解释一下您要完成的工作并提供一个示例数据集,可以单独使用来说明您的问题?如果您的数据太大(我猜可能是这样),您能用其中一个内置数据集演示相同的原理吗?

标签: r ggplot2 alignment axis


【解决方案1】:

我可以摆脱大部分边界,但不是全部。这里使用来自ggplot2 的内置diamonds 数据集的示例。

par_plots <- list() 
cuts = unique(diamonds$cut)
for (c in as.numeric(cuts)) {
  par_plots[[c]] = ggplot(diamonds %>% filter(as.numeric(cut) == c),
                          aes(x = price)) +
    geom_histogram() +
    scale_x_continuous(expand = expansion(0)) +
    xlab(paste0(i)) +
    theme_classic() +
    theme(axis.text.x = element_text(angle = 0, colour = "black"),
          text=element_text(family="Times New Roman", size = 12), 
          plot.margin = unit(c(0,0,0,0), "cm"),
          panel.border = element_blank(),
          panel.grid.major = element_blank(),
          panel.grid.minor = element_blank(),
          axis.line.y = element_blank(),
          axis.title.y = element_blank(),
          axis.text.y = element_blank(),
          axis.ticks.y = element_blank(),
          axis.line.x = element_line(colour = "black"))
}

library(grid)
grid.newpage()
# png(paste("./snp_map.png"),  width = 15*4.5, height = 8, res = 320, units = "cm", pointsize = 12, bg = "white")
grid.draw(cbind(ggplotGrob(par_plots[[1]]),
                ggplotGrob(par_plots[[2]]),
                ggplotGrob(par_plots[[3]]),
                ggplotGrob(par_plots[[4]])))


dev.off()

【讨论】:

    猜你喜欢
    • 2021-07-02
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    相关资源
    最近更新 更多