ggplot2:从图中删除未使用的因子水平组合的方面(facet_grid)

2024-02-23

我想有选择地从多面 ggplot2 图中删除不必要的多面。我查看了这个问题,但不知道该怎么做(也许那里的建议现在已经过时了):

将空图添加到ggplot2中的facet_wrap https://stackoverflow.com/questions/30372368/adding-empty-graphs-to-facet-wrap-in-ggplot2

这是一个最小的例子。我想删除右下角的空面(b,2)。

library('ggplot2')
d <- data.frame('factor_1' = factor(c('a', 'a', 'b')),
                'factor_2' =    factor(c('1', '2', '1')),
                x = 1:3, y = 1:3)

ggplot(data = d, mapping = aes(x = x, y = y)) +
  geom_point() +
  facet_grid(facets = factor_1 ~ factor_2, drop = TRUE)

明显地drop = TRUE在这里没有影响,因为没有未使用的因子水平,只有未使用的组合。


在 ggplot2 2.2.0 中,绘图中的 grobs 的名称已更改。

library(ggplot2)
library(grid)
d <- data.frame('factor_1' = factor(c('a', 'a', 'b')),
                'factor_2' =    factor(c('1', '2', '1')),
                x = 1:3, y = 1:3)

p = ggplot(data = d, mapping = aes(x = x, y = y)) +
  geom_point() +
  facet_grid(facets = factor_1 ~ factor_2, drop = TRUE)

# Get ggplot grob
g = ggplotGrob(p)

# Get the layout dataframe. 
# Note the names.
# You want to remove "panel-2-2"
g$layout

# gtable::gtable_show_layout(g) # Might also be useful

# Remove the grobs
# The grob needs to be remove,
#  and the relevant row in the layout data frame needs to be removed
pos <- grepl(pattern = "panel-2-2", g$layout$name)
g$grobs <- g$grobs[!pos]
g$layout <- g$layout[!pos, ]


# Alternatively, replace the grobs with the nullGrob
g = ggplotGrob(p)
pos <- grep(pattern = "panel-2-2", g$layout$name)
g$grobs[[pos]] <- nullGrob()

# If you want, move the axis
# g$layout[g$layout$name == "axis-b-2", c("t", "b")] = c(8, 8)

# Draw the plot
grid.newpage()
grid.draw(g)

您链接中的答案需要修改如下:

n <- 1000
df <- data.frame(x = runif(n), y=rnorm(n), label = sample(letters[1:7], 
                 size = n, replace = TRUE), stringsAsFactors=TRUE)
df$label.new <- factor(df$label, levels=sort(c(""," ",levels(df$label))))


p <- ggplot(df, aes(x=x, y=y)) + geom_point() + 
         facet_wrap(~ label.new, ncol=3,drop=FALSE)

g = ggplotGrob(p)

g$layout # Note the names and their positions (t, b, l, r)
# gtable::gtable_show_layout(g) # Might also be useful

pos <- g$layout$name %in% c("panel-1-1", "panel-1-2", "strip-t-1-1", "strip-t-2-1")
g$grobs <- g$grobs[!pos]
g$layout <- g$layout[!pos, ]

# Or replace the grobs with the nullGrob
g = ggplotGrob(p)
pos <- g$layout$name %in% c("panel-1-1", "panel-1-2", "strip-t-1-1", "strip-t-2-1")
g$grobs[pos] <- list(nullGrob())

# Move the axis
g$layout[g$layout$name == "axis-l-1-1", c("l", "r")] = c(10,10)

grid.newpage()
grid.draw(g)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ggplot2:从图中删除未使用的因子水平组合的方面(facet_grid) 的相关文章

  • 使用 R 下载压缩数据文件、提取并导入 .csv

    我正在尝试使用以下方法从网页下载并提取 csv 文件R 这个问题是重复的使用 R 下载压缩数据文件 提取和导入数据 https stackoverflow com questions 3053833 using r to download
  • R 中具有 p 值的相关矩阵

    假设我想要传导相关矩阵 library dplyr data iris iris gt select if is numeric gt cor y iris Petal Width method spearman gt round 2 现在
  • 使用 R Markdown 文档作为函数源

    我正在研究 R Markdown 来记录我经常使用的功能 我会将它们放入 R Markdown 文件中以记录它们 然后如果我几个月后回来查看它 就能够阅读我在函数背后的想法 我的问题是 如果我开始一个新的 R 项目 是否可以获取 r mar
  • 连接树状图和热图

    我有一个heatmap 一组样本的基因表达 set seed 10 mat lt matrix rnorm 24 10 mean 1 sd 2 nrow 24 ncol 10 dimnames list paste g 1 24 sep p
  • R 获取子字符串和正则表达式?

    我有一组文件名字符串 我想提取 符号之后但文件扩展名之前的所有字符 例如 文件名之一是 HelloWorld you txt 我想返回字符串you 这是我的代码 hashPos grep name fixed TRUE dotPos len
  • R ggplot2 分面保持比率但覆盖/定义输出图大小

    我目前正在使用 ggplot2 来比较不同组的统计数据 每个组属于不同的区域 这是通过运行 R 脚本的 Web 应用程序 tikiwiki CMS 插件 R 完成的 每个区域我可以有 2 到 30 个或更多组 相同的 R 脚本针对唯一网页中
  • 在列标题和配对变量中嵌入数据的数据透视表

    假设我有这样的数据 不幸的是 变量值嵌入在列名称中 library tidyr library dplyr dat lt tribble group var1 var meta1 var2 var meta2 group1 5 2 cat
  • Matlab 中是否有相当于 R 的 dput() 的函数?

    Matlab 中是否有相当于 R 的 dput 的函数 dput 将 R 对象的 ASCII 文本表示形式写入文件或连接 UPDATE 1 添加了递归和对单元格的支持 UPDATE 2 添加了对结构的支持 UPDATE 3 增加了对逻辑 整
  • R中data.frame(列表)的列平均值

    Data https i stack imgur com ZYsmv jpg 请 我需要计算此 data frame 中维吉尼亚币 Sepal Length 列的平均值 Sepal Length Sepal Width Petal Leng
  • 如何在闪亮的observeEvent中监听多个事件表达式

    我想要两个不同的事件触发观察者 有人建议here https stackoverflow com questions 34731975 how to listen for more than one event expression wit
  • ggplot:类似于scale_color_steps()的有序因子的色标

    With scale color steps 我们可以通过设置low和high争论 一个例子 df lt data frame x rnorm 99 y rnorm 99 col rnorm 99 ggplot df aes x y col
  • ODE 时间 Matlab 与 R

    如果在 matlab 中使用可变时间步长求解器 例如 ODE45 我会定义输出的时间跨度 即times 0 50 matlab 将返回 0 到 50 之间不同时间步长的结果 然而在 R 中 我似乎必须定义我希望 ODE 返回结果的时间点 即
  • 在 R 中计算大矩阵的零空间

    我找不到任何函数或包来计算 a 的零空间或 QR 分解 bigmatrix from library bigmemory 在 R 中 例如 library bigmemory a lt big matrix 1000000 1000 typ
  • R 子集 XTS 工作日

    如何对 xts 对象进行子集化以仅包含工作日 周一至周五 周六和周日除外 这就是我要做的 library xts data sample matrix sample xts lt as xts sample matrix descr my
  • 如何比较数据框1的每一行与数据框2的每一行?

    我有两个数据框 如下所示 x data frame Name c 200003 200260 400826 400863 500710 Chr c chr1 chr1 chr2 chr3 chr3 Position c 11880 1441
  • 错误:美学必须是长度一,或者在省略 NA 时与 dataProblems:personCategoryz 的长度相同

    我正在尝试使用泰坦尼克号数据集创建一个图表 该数据集查看女性 儿童和男性及其生存率 我创建了新的类别来读取数据 但当我尝试超越该点时 不断出现错误消息 当我运行一个图表来显示这一点时 它显示得很好 只是它有一个单独的 NA 数据类别 所以我
  • 有什么方法可以禁用 PDF/Postscript 输出中的“减号破解”吗?

    在 R 中 将绘图保存到 PDF 或 Postscript 文件时 轴标签中的连字符会变成减号 显然 这是设计使然 根据 postscript 设备的文档 正常编码规则 有一个例外 字符 45 始终设置为负号 其在 Adob e ISOLa
  • R 中的 aov() 错误术语:bw Error(id) 和 Error(id/timevar) 规范有什么区别?

    两者有什么区别aov depvar timevar Error id 和aov depvar timevar Error id timevar 配方规格 这两种变体产生略有不同的结果 同样的问题曾经在这里被问过 https stats st
  • 消除垂直线ggplot

    这个问题以前曾被问过 但答案并不总是明确或很复杂 我希望 ggplot2 的新版本能够带来更简单的解决方案 如何仅消除 ggplot 的垂直线而不消除轴刻度线或标签 这对于条形图来说确实很好 因为它可以消除图形中一些不必要的干扰 这里有一些
  • R - 加速近似日期匹配。 idata.frame?

    我正在努力有效地执行两个数据帧之间的 关闭 日期匹配 这个问题探索了一个解决方案 使用idata frame来自plyr包 但我也对其他建议的解决方案感到非常满意 这是两个数据框的非常简单的版本 sampleticker lt data f

随机推荐

  • 这个指针转换是否违反了严格的别名规则?

    这是 Quake III Arena 的快速反平方根实现 float Q rsqrt float number long i float x2 y const float threehalfs 1 5F x2 number 0 5F y n
  • GDB:创建局部变量?

    我正在使用 Xcode 的调试器 当停在断点处时 是否可以在 GDB 命令提示符中键入命令来创建局部变量 如果是这样 怎么办 请举个例子 我知道我可以在代码中完成它 然后重新编译程序 但我正在寻找一种更快的方法 如果您不需要在代码中引用变量
  • ABCpdf 转换 html 锚点以跳转到同一 PDF 中的另一个页面

    我使用 ABCpdf 动态生成 PDF 其中包含一个目录 该目录将链接到同一 PDF 中的其他页面 问题是 HTML 中锚标记的路径更改为临时文件的绝对路径 例如 ABCpdf 将呈现链接的 href a href elementId Li
  • 如何检查整数中的重复序列

    我有一个字母数字字符串 我想检查其中的整数模式重复 而且它们应该是连续的 Example 12341234qwe应该告诉我1234被重复 1234qwe1234 should NOT告诉我1234重复 因为它不连续 12121212应被视为
  • 如何向 select2 放置元素添加特定类?

    我通过 css 定制了 select2 及其通用类和 id 现在 我正在尝试自定义一个特定的类 该类将提供给 select2 然后在 css 中应用到它 我的问题 不是每个说的选择 而是它的删除 带有类的 div选择2拖放 附加到正文 我如
  • 常量之间的区别。指针和引用?

    常量指针和引用有什么区别 常量指针顾名思义是不能再次绑定的 参考的情况也是如此 我想知道在什么样的情况下 其中一种会比另一种更受青睐 他们的 C 标准和实现有何不同 cheers const 指针有 3 种类型 Data that p po
  • 构建 clang 示例时出现致命错误:未找到“type_traits”文件 #include

    我正在尝试建立打印函数名称 http llvm org viewvc llvm project cfe trunk examples PrintFunctionNames PrintFunctionNames cpp view markup
  • 抛出 WebApplicationException 时 Jersey 会产生意外的默认媒体类型

    我正在使用 JAX RS API 开发一个 Web 服务 并以 Jersey 1 17 作为我的实现 我希望客户可以在 JSON 和 XML 之间进行选择 他们使用AcceptHTTP 标头 当客户端不包含以下内容时 我希望 JSON 成为
  • 无法单击元素:Splinter / Selenium 中的 ElementClickInterceptedException

    我正在尝试抓取页面 但有时无法单击链接 按钮 当网页加载时 loadingWhiteBox 将首先出现 然后在几秒钟后消失 但它会保留在HTML代码中 只要该框出现在网站上 我就无法单击该链接 并且得到以下错误消息 selenium com
  • 检索 ImageView 的坐标

    我想知道是否可以获取 ImageView 的左侧和顶部坐标 我在 ScrollView 内的相对布局内有 2 个 ImageView 我尝试检索 ImageView 的矩阵matrix iv getImageMatrix 但这没有帮助Mat
  • 即使按下 cancel() 按钮,Ionic 2 onDidDismiss() 也会保存

    我的 Ionic 2 应用程序出现问题 到目前为止 我已经构建了一个项目列表页面 其中的每个项目都导航到详细信息页面 在详细信息页面 您可以编辑并选择保存或取消任何更改 保存效果很好 问题是onDidDismiss 即使关闭函数不 不应该将
  • 如何复制一个小部件的 GTK 样式并将其应用到另一个小部件?

    我当前的 GTK 弹出窗口如下所示 请注意 它采用深色氛围颜色主题 GTK3 8及以后版本有GTK菜单按钮 https developer gnome org gtk3 3 8 GtkMenuButton html 弹出窗口看起来像这样 请
  • 如何获取 Linux 中进程的进程树跟踪/日志?

    我想知道脚本启动哪些可执行文件以及以什么顺序 并递归地跟踪这些可执行文件 例如 假设我这里有一个 bash 脚本 称为 abc sh bin bash ls gcc 我想使用 trace log 命令 运行此脚本并得到如下内容 abc sh
  • pandas to_dict 具有 python 本机日期时间类型而不是时间戳

    我有一个pandas DataFrame df其中包含Timesatamp列 我希望创建一个行迭代器 通过iter 方法或通过to dict from df哪里的Timesatamp值是 pythondatetime 我试过这样做 for
  • 如何在Azure云上部署Spring Cloud微服务

    我正在使用 Spring Cloud 和 Netflix Eureka 进行微服务开发 现在我想在Azure上部署这些微服务 我试着遵循这个Link https azure microsoft com en in documentation
  • 为什么 gsutil cp 需要在版本化存储桶上进行 storage.objects.delete ?

    我正在使用服务帐户将文件上传到具有版本控制的 Google Cloud Storage 存储桶 我想将服务帐户权限保持在最低限度 它只需要上传文件 所以我不想授予它删除文件的权限 但上传失败 仅在流式传输所有内容之后 说它需要删除权限 难道
  • 我如何获取 MSMQ 队列上的所有可用消息

    处理队列中当前所有消息的最佳方法是什么 我们有一个包含大量非常小的消息的队列 我想做的是读取所有当前消息 然后将它们发送到线程池进行处理 我似乎找不到任何好的资源来向我展示如何创建一个简单的方法来返回 IEnumerable 例如 Than
  • Python set 类、float 和 int 求值

    没有看到具体的实现细节set Class但我认为这个问题的答案就在某个地方 Python 赋值基本上评估右值并使用标识符作为引用对象来指向类对象 集合也是如此 即它们是抽象数据结构或引用对象的 集合 集合不允许重复 当我创建一个集合时 如下
  • 移动 Chrome 在滚动时触发调整大小事件

    我在 Galaxy S4 Android 4 2 2 上使用 Chrome 移动浏览器 由于某种原因 每次向下滚动页面时 它都会触发一个调整大小事件 该事件通过 jquery cycle2 幻灯片中的图像缩放进行验证 知道为什么会发生这种情
  • ggplot2:从图中删除未使用的因子水平组合的方面(facet_grid)

    我想有选择地从多面 ggplot2 图中删除不必要的多面 我查看了这个问题 但不知道该怎么做 也许那里的建议现在已经过时了 将空图添加到ggplot2中的facet wrap https stackoverflow com question