我正在使用facet_work创建一个2x2ggmap,其中的列是两个不同的组. 这意味着列上的x轴在顶行和底行之间相同,但在列之间不同.我要删除重复的x轴刻度标签,当它们被重复时.

在facet_wrap中,x轴是否可以在列之间变化?

这是一个数据的玩具例子,以及我到目前为止try 过的东西.当我使用参数"scales = free_x"时,您将看到x轴在上下行重复.如果我不使用free_x,那么x轴的比例对于每个图来说都太宽了.

有没有一个论点,我可以使用,或者我应该寻找一些类似拼凑的东西,把情节连接在一起?

library(ggplot2)

n = 100

df = data.frame(x = c(rnorm(n/2), rnorm(n/2, mean = 100)),
                y = rnorm(n),
                group = rep(1:2, each = n/2),
                facet = rep(c("A", "C", "B", "D"), each = n/4))

ggplot(data = df, aes(x = x, y = y)) + 
  geom_point() + 
  facet_wrap(~facet + group, scales = "free_x")

推荐答案

根据你想要的结果,patchwork将给你最大的灵活性.第二个选项至少让你接近你想要的结果将是使用ggh4x::facetted_pos_scales,它允许设置每个面板的刻度.然而,我只找到了一个选项,可以删除顶行的轴标签,但没有删除刻度线.

library(ggplot2)

set.seed(123)

n <- 100

df <- data.frame(
  x = c(rnorm(n / 2), rnorm(n / 2, mean = 100)),
  y = rnorm(n),
  group = rep(1:2, each = n / 2),
  facet = rep(c("A", "C", "B", "D"), each = n / 4)
)

scale_y <- df |>
  split(~ group + facet, drop = TRUE) |>
  lapply(
    \(x) {
      labels <- if (!unique(x$facet) %in% c("A", "B")) waiver()
      limits <- range(df[df$group == unique(x$group), "x"])
      scale_x_continuous(
        labels = labels,
        limits = limits
      )
    }
  )

ggplot(data = df, aes(x = x, y = y)) +
  geom_point() +
  facet_wrap(~ facet + group,
    scales = "free_x"
  ) +
  ggh4x::facetted_pos_scales(
    x = scale_y
  )

R相关问答推荐

terra nearest()仅为所有`to_id`列返回NA

随机森林回归:下拉列重要性

在使用ggroove后,将图例合并在gplot中

使用sf或terra的LINESTRAING的累积长度

如何在所有绘图中保持条件值的 colored颜色 相同?

R Select()可以测试不存在的子集列

ComplexHEAT:使用COLUMN_SPLIT时忽略COLUMN_ORDER

如何在PackageStatus()中列出&q;不可用的包&q;?

按多列统计频次

Data.table';S GForce-将多个函数应用于多列(带可选参数)

更改STAT_VALLES/STAT_PEAKS中的箭头线宽/大小

如何在R中平滑地绘制线图(不拟合)?

条形图顶部与其错误条形图不对齐

有没有可能用shiny 的书签恢复手风琴面板?

R仅当存在列时才发生变异

如何在GALT包的函数&geom_x样条线中调整线宽

为什么不能使用lApply在包装函数中调用子集

按组使用dummy r获取高于标准的行的平均值

如何在不使用SHINY的情况下将下拉滤镜列表添加到ggploy?

在具有条件的循环中添加行