R 如何放大部分打印并删除缩放区域外的注释?

R 如何放大部分打印并删除缩放区域外的注释?,r,ggplot2,geom-text,R,Ggplot2,Geom Text,我用geom\u rect创建了一个绘图,并用geom\u text\u repel添加了注释,但是当我想创建几个绘图时,我放大了原始绘图的一部分。缩放区域外区域的标签也会出现 这是一个简单的例子: start = c(1, 5,8, 14, 19, 25) end =c(3, 6,12, 16, 22, 30) label = c(1,2,3, 4, 5, 6) library(ggplot2) library(ggrepel) regions = tibble::tibble(label,

我用
geom\u rect
创建了一个绘图,并用
geom\u text\u repel
添加了注释,但是当我想创建几个绘图时,我放大了原始绘图的一部分。缩放区域外区域的标签也会出现

这是一个简单的例子:

start = c(1, 5,8, 14, 19, 25)
end =c(3, 6,12, 16, 22, 30)
label = c(1,2,3, 4, 5, 6)

library(ggplot2)
library(ggrepel)
regions = tibble::tibble(label, start, end)

ggplot() +
  scale_x_continuous() +
  scale_y_continuous(name = "") +
  geom_rect(
    data = regions,
    mapping = aes(
      xmin = start,
      xmax = end,
      ymin = 1.5,
      ymax = 1.8),
    color = "black",
    fill = "#56B4E9"
  ) +
  geom_text_repel(
    data = regions,
    aes(
       x = start + (end - start) / 2,
      y = 1.8,
      label = label,
    ),
    size = 10,
    force_pull   = 0,
    nudge_y      = 0.05,
    direction    = "x",
    angle        = 90,
    vjust        = 0,
    segment.size = 0.5,
  ) +
  ylim(1.38, 2.2) +
  ylab("") +
  xlab("") +
  theme_minimal() 
此代码生成此绘图:

我想放大方框3,所以我尝试添加
+xlim(8,12)
+facet\u zoom(xlim=c(8,12))
,但缩放后的绘图具有方框1、方框2的注释(标签)。。。如图所示,在侧面(放大图右侧为1,2,左侧为4,5,6)

+xlim(8,12)


如何删除缩放区域外的标签(注释)(缩放图右侧的1,2和左侧的4,5,6?

我可以想到两个快速修复方法,第一个是您已经提到的方法。也许你打错了,因为我可以很好地运行它

  • 设置
    xlim(8,12)
  • 如果我运行此命令,我将获得以下图像 但是,并不总是建议使用
    xlim()
    ,因为它会丢弃所有其他不符合条件的点。虽然这对你的情况可能是有利的

  • 使用
    coord\u cartesian()
    区域进行子集设置并正确放大

  • 这会产生相同的图像(据我所知)

    为了快速修复,您只需在'geom_text_repel()'调用中对
    区域
    数据进行子集,以仅包含标签3。谢谢,如果我在
    数据
    中对
    区域
    参数进行子集设置,请,子集是一个向量,而
    data
    参数只接受一个数据帧。如果我能做
    data=(regions$label==3)
    非常感谢,我不知道你能使用
    coord_cartesian(xlim=c(8,12))
    但我还是遇到了同样的问题。我不知道为什么你的图是干净的,并且没有在边上包含任何1,2,4,5,6的标签。我确实复制了你这里的代码,并将其粘贴在工作室的干净环境中,但我无法重新生成与你相同的结果。我的情节仍然与原问题中的第三个情节相似。@Sam,这很奇怪。作为旁注,我稍微将代码编辑为
    regions=data.frame(label,start,end)
    。我不完全清楚,但可能是由于您的软件包版本或R版本。能否显示您的
    sessionInfo()
    ?如果我使用
    data=subset(regions,regions$label==3)
    在geom\u text\u repel中对区域数据进行子集化,以仅包含标签3,那么它就起作用了。非常感谢你:)
    library(ggrepel)
    start = c(1, 5,8, 14, 19, 25)
    end =c(3, 6,12, 16, 22, 30)
    label = c(1,2,3, 4, 5, 6)
    
    regions = data.frame(label, start, end)
    
    ggplot() +
      scale_x_continuous() +
      scale_y_continuous(name = "") +
      geom_rect(
        data = regions,
        mapping = aes(
          xmin = start,
          xmax = end,
          ymin = 1.5,
          ymax = 1.8),
        color = "black",
        fill = "#56B4E9"
      ) +
      geom_text_repel(
        data = regions, 
        aes(
          x = start + (end - start) / 2,
          y = 1.8,
          label = label,
        ),
        size = 10,
        force_pull   = 0,
        nudge_y      = 0.05,
        direction    = "x",
        angle        = 90,
        vjust        = 0,
        segment.size = 0.5,
      ) +
      ylim(1.38, 2.2) +
      xlim(8, 12) +
      ylab("") +
      xlab("") +
      theme_minimal() 
    
    
    ggplot() +
      scale_x_continuous() +
      scale_y_continuous(name = "") +
      geom_rect(
        data = regions,
        mapping = aes(
          xmin = start,
          xmax = end,
          ymin = 1.5,
          ymax = 1.8),
        color = "black",
        fill = "#56B4E9"
      ) +
      geom_text_repel(
        data = subset(regions, label == 3),
        aes(
          x = start + (end - start) / 2,
          y = 1.8,
          label = label,
        ),
        size = 10,
        force_pull   = 0,
        nudge_y      = 0.05,
        direction    = "x",
        angle        = 90,
        vjust        = 0,
        segment.size = 0.5,
      ) +
      ylim(1.38, 2.2) +
      coord_cartesian(xlim = c(8, 12)) +
      ylab("") +
      xlab("") +
      theme_minimal()