当使用facet_grid()时,我希望能够创建一个只具有最外边界的图.这个问题以前已经回答过了:ggplot2 outside panel border when using facet

但是这个例子对我不起作用,因为我需要面标签在图的底部,当使用这个解决方案时,顶部边界上的每个网格之间都有一个空间.

#Example for stack 

  df <- structure(list(Lake = c("Lake_x", "Lake_x", "Lake_x", "Lake_x"
  ), Site = c("Lake_x-1", "Lake_x-2", "Lake_x-3", "Lake_x-4"), 
  Season = structure(1:4, levels = c("Season1", "Season2", 
                                     "Season3", "Season4"), class = "factor"), Nitrogen = c(450L, 
                                                                                            390L, 930L, 950L)), row.names = c(NA, -4L), class = "data.frame")
  
  df$Season
  #order Season
  df$Season <- factor(df$Season, levels=c("Season1", "Season2", "Season3", "Season4"))
  
  ggplot(df, aes(fill = Site, y = Nitrogen , x = Site)) +
    geom_bar(stat="identity", position = position_dodge(width = 6), width = 0.4) +
    scale_fill_manual(
      "Site",
      values = c("black", "black", "black", "black"),
      
    ) +
    theme_classic() +
    theme(panel.border = element_rect(colour = "black", fill=NA, size=1),
          text = element_text(size = 8, family = "sans"),
    ) + labs(title = 'Area 8', x = "", y = expression(paste("Total Nitrogen (µg/L)"))) +
    scale_y_continuous(expand = c(0,0))  +  
    scale_x_discrete(NULL, expand = c(0.2, 0.2)) +
    theme(legend.position ="none") +
    facet_grid(~Season, scales = "free_x", switch = 'x') +
    theme(panel.background = element_blank(),
          panel.spacing = unit(0, "line"), 
          strip.background = element_blank(),
          strip.placement = "outside") + theme(plot.title.position = 'plot', 
                                               plot.title = element_text(hjust = 0.5)) + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) 

What current output looks like enter image description here

我想三个黑色的水平边界的阴谋被删除,使它看起来像一个阴谋.

注意:我知道在本例中可以在没有facet_grid()的情况下绘制绘图,但这只是一个示例,我的实际绘图肯定需要使用facet_grid,所以在使用此函数时需要解决外部边界问题.

推荐答案

我不知道有什么办法可以通过theme()或者...但类似于您引用的答案/帖子中的选项2的一种老套方法是使用panel.border=element_blank()go 掉面板边框,然后使用geom_hlinegeom_vline伪装面板外部边框:

library(ggplot2)

dat_vline <- data.frame(
  xintercept = c(-Inf, Inf),
  Season = c("Season1", "Season4")
)

dat_hline <- data.frame(
  yintercept = c(-Inf, Inf)
)

ggplot(df, aes(fill = Site, y = Nitrogen, x = Site)) +
  geom_vline(data = dat_vline, aes(xintercept = xintercept), lineend = "square") +
  geom_hline(data = dat_hline, aes(yintercept = yintercept), lineend = "square") +
  geom_bar(stat = "identity", position = position_dodge(width = 6), width = 0.4) +
  scale_fill_manual(
    "Site",
    values = c("black", "black", "black", "black"),
  ) +
  scale_y_continuous(expand = c(0, 0)) +
  scale_x_discrete(NULL, expand = c(0.2, 0.2)) +
  coord_cartesian(clip = "off") +
  facet_grid(~Season, scales = "free_x", switch = "x") +
  labs(title = "Area 8", x = "", y = expression(paste("Total Nitrogen (µg/L)"))) +
  theme_classic() +
  theme(legend.position = "none") +
  theme(
    panel.border = element_blank(),
    text = element_text(size = 8, family = "sans"),
  ) +
  theme(
    panel.background = element_blank(),
    panel.spacing = unit(0, "line"),
    strip.background = element_blank(),
    strip.placement = "outside"
  ) +
  theme(
    plot.title.position = "plot",
    plot.title = element_text(hjust = 0.5)
  ) +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))

enter image description here

R相关问答推荐

按自定义数字模式对变量名称排序

如何在热图中绘制一个图形,但在每个单元格中通过饼形图显示?

使用R中的gt对R中的html rmarkdown文件进行条件格式设置表的单元格

derrr summarise每个组返回多行?

如何通过Docker部署我的shiny 应用程序(多个文件)

我想在R中总结一个巨大的数据框架,使我只需要唯一的lat、lon、Date(Year)和Maxium Value""""""""

矩阵的堆叠条形图,条形图上有数字作为标签

找出二叉树中每个 node 在R中的深度?

如何通过ggplot2添加短轴和删除长轴?

在R中按行按列范围查找最大值的名称

以相同的方式对每个表进行排序

合并后返回列表的数据帧列表

QY数据的处理:如何定义QY因素的水平

如何筛选截止年份之前最后一个测量年度的所有观测值以及截止年份之后所有年份的所有观测值

如何显示准确的p值而不是<;0.001*?

主题(Legend.key=Element_RECT(Fill=&Quot;White&Quot;))不起作用

使用ggplot2绘制具有边缘分布的坡度图

在ggplot2图表中通过端点连接点

R try Catch in the loop-跳过缺少的值并创建一个DF,显示跳过的内容

如何将一列相关性转换为R中的相关性矩阵