对齐多个 ggplot 图表(带或不带图例)[重复]

2023-11-21

我正在尝试使用 ggplot 绘制一个图表来比较两个变量的绝对值,并显示它们之间的比率。由于比率是无单位的,而值不是无单位的,因此我无法在同一 y 轴上显示它们,因此我想将它们垂直堆叠为两个具有对齐 x 轴的独立图形。

这是我到目前为止所得到的:

enter image description here

library(ggplot2)
library(dplyr)
library(gridExtra)

# Prepare some sample data.
results <- data.frame(index=(1:20))
results$control <- 50 * results$index
results$value <- results$index * 50 + 2.5*results$index^2 - results$index^3 / 8
results$ratio <- results$value / results$control

# Plot absolute values
plot_values <- ggplot(results, aes(x=index)) +
  geom_point(aes(y=value, color="value")) +
  geom_point(aes(y=control, color="control"))

# Plot ratios between values
plot_ratios <- ggplot(results, aes(x=index, y=ratio)) +
  geom_point()

# Arrange the two plots above each other
grid.arrange(plot_values, plot_ratios, ncol=1, nrow=2)

最大的问题是第一个图右侧的图例使其大小不同。一个小问题是,我不想在顶部绘图上显示 x 轴名称和刻度线,以避免混乱并明确它们共享同一轴。

我查看了这个问题及其答案:

对齐 ggplot 中的绘图区域

不幸的是,这两个答案都不适合我。分面似乎不太合适,因为我想为我的两个图表使用完全不同的 y 尺度。操作 ggplot_gtable 返回的维度似乎更有希望,但我不知道如何解决两个图具有不同数量的单元格的事实。天真地复制该代码似乎并没有改变我的案例的结果图形尺寸。

这是另一个类似的问题:

在 ggplot 中对齐绘图的危险

问题本身似乎提出了一个不错的选择,但 rbind.gtable 会抱怨表是否具有不同的列数,由于图例,这里就是这种情况。也许有办法在第二个表中插入额外的空列?或者有一种方法可以抑制第一个图中的图例,然后将其重新添加到组合图中?


这是一个不需要显式使用网格图形的解决方案。它使用方面,并隐藏“比率”的图例条目(使用来自https://stackoverflow.com/a/21802022).

library(reshape2)

results_long <- melt(results, id.vars="index")
results_long$facet <- ifelse(results_long$variable=="ratio", "ratio", "values")
results_long$facet <- factor(results_long$facet, levels=c("values", "ratio"))

ggplot(results_long, aes(x=index, y=value, colour=variable)) +
  geom_point() +
  facet_grid(facet ~ ., scales="free_y") +
  scale_colour_manual(breaks=c("control","value"),
                      values=c("#1B9E77", "#D95F02", "#7570B3")) +
  theme(legend.justification=c(0,1), legend.position=c(0,1)) +
  guides(colour=guide_legend(title=NULL)) +
  theme(axis.title.y = element_blank())

plot with legend for only one facet

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

对齐多个 ggplot 图表(带或不带图例)[重复] 的相关文章

  • 组合上标和包含 < 符号的变量标签时使用 ggplot geom_text

    我在将 R2 注释添加到多面图中时遇到问题 其中我的 R2 值有时 例如 使用 iris 数据集 我首先使用之前计算的 R2 值设置一个新的数据框 x 和 y 位置也已设置 因为每个方面的 x 和 y 位置都不同 对于 iris 数据集来说
  • str_count 具有重叠子字符串

    我正在尝试计算字符向量中子字符串的出现次数 例如 lookin lt c babababa bellow ra baba searchfor lt aba str count lookin searchfor 返回 2 0 1 但是 我希望
  • R中引用和表达式的区别

    gettypes function x paramx substitute x print typeof paramx print class paramx print mode paramx gettypes expression sin
  • Eclipse 和 R 中的 StatET

    我已经成功地将 StatET 安装到 eclipse 中 并且我有一个名为 Test 的 Java 项目 其中包含一些代码 我希望能够在该项目文件夹中保留 R 文件并将其作为独立的 R 脚本运行 与 Java 程序分开 我怎样才能做到这一点
  • 使用 R 时 Bash 中的颜色语法突出显示

    我在 Ubuntu 下的 Bash 中运行 R 有没有办法在运行 R 时在 Bash 中使用颜色语法突出显示 我非常感谢有关该主题的任何信息 并希望这个问题不会令人烦恼地无知 您可以尝试colorout包裹
  • R:如何检查向量元素是否相同

    gt dput ranks structure c NA NA 2L 2L NA NA NA 2L 1L Names c LANG1 LANG2 LANG3 LANG4 LANG5 LANG6 LANG7 LANG8 LANG9 gt ra
  • 在 R 中,如何将整个命令行放入二元运算符的 sys.call() 中?

    我为 R 编写了一个二元运算符函数 即名称类似于 X 这样就不必输入 X a b 我可以使用更方便的语法a X b 我的目标是有一个包装器 lt 它会执行一些操作 例如记录对该环境中的对象所做的操作并检查 受保护 属性 该属性会在覆盖该对象
  • 在 R 中管理元数据的最佳方法是什么? [复制]

    这个问题在这里已经有答案了 在分析数据时 有关变量的元数据极其重要 您如何在 R 中管理这些信息 例如 有没有办法指定将打印的标签而不是变量名称 R中有哪些工具可以实现这一点 我想到的快速建议是 将数据与对象一起存储的属性 正如 Frank
  • 数据表中的最大行数

    我的 data table 中有一个包含 8 000 000 行 100 列的数据集 其中每列都是一个计数 我需要找到每行的最大计数以及该最大值位于哪一列 我可以使用以下命令快速获取每行的哪一列具有最大值 dt lt dt maxCol w
  • 基本 R 图:帮助减少多个图之间的空间

    我试图减少一个窗口中多个绘图之间的空间量 但无法实现我想要的 情节和代码如下 我想将图例保留在原处 但减少 B 和 C 之间的空间 如何将图 C 向左 移动到靠近图 B 的位置以模仿 A 和 B 之间的间距 同时保持图例就位 我希望传奇是独
  • 将函数应用于因子相关子矩阵

    我有一个对称矩阵 数据框 看起来像 structure list HQ673618 1 c NA 90 8 89 8 89 6 89 8 88 9 87 8 88 2 88 3 HQ674317 1 c 90 8 NA 98 6 97 7
  • 使用 ff 包导入文本文件

    我有一个包含 450 万行和 90 列的文本文件要导入到 R 中 read table我得到了cannot allocate vector of size 错误消息 因此我尝试使用 ff 包导入 然后再对数据进行子集化以提取我感兴趣的观察结
  • 根据“df1”的一个变量(“df1$var1”)在“df1”中创建一个变量,并根据“df1$var1”创建一个可更改的“df2”变量

    我有数据框df1总结了一段时间内鱼的深度 df1 Site告诉你鱼所在的地点 df1 Ind告诉你个人和df1 Depth告诉您鱼在特定位置的深度df1 Datetime 另一方面 我有df2总结了一段时间内 每三小时 从表面到 39 米深
  • 包含 NA 的数据的聚类标准误差

    我无法使用 R 和基于此的指导对标准错误进行聚类post http thetarzan wordpress com 2011 06 11 clustered standard errors in r cl 函数返回错误 Error in t
  • 为什么连接终止

    我正在尝试使用随机森林分类模型H2OR 内部的库 训练集有 7000 万行和 25 个数字特征 总文件大小为 5 6 GB 验证文件的大小为 1 GB 我的系统有 16 GB RAM 和 8 核 CPU 系统成功读取 H2O 对象中的两个文
  • 如何在R中对多个时间序列应用dtw算法?

    Problem 我有不同车辆速度的时间序列 我的最终目标是根据不同车辆在时间上的速度相似性对它们进行聚类 因此 我基本上需要生成一个距离矩阵 其中每个单元格包含一对车辆速度时间序列之间的距离 我想使用动态时间扭曲 dtw 作为距离度量 所以
  • R - 按列比较两行并将结果写入表中

    我是 R 新手 可能我的问题的解决方案非常简单 但目前我无法实现 我想按列比较数据框中的行 每列中的数据是一个字母 核苷酸碱基 seq1 A C T G T seq2 A C G G G seq3 A G G C A 我想按列比较数据集中的
  • 通过 rpy2 将 numpy 数组传递给 R 时出现不一致数组

    我正在尝试将 numpy 数组传递到 R 中的 GAMLSS 包 import numpy as np import rpy2 robjects as robjects from rpy2 robjects import numpy2ri
  • rollapply 可以返回矩阵列表吗?

    我想使用滚动窗口生成协方差矩阵 和均值向量 但在我所有的尝试中rollapply堆叠协方差矩阵cov并且耗尽了预先分配的空间 例如 如果我的原始数据有 40 个观察值 那么rollapply不能返回超过 40 行 有什么方法可以让我得到ro
  • R 脚本 - 如何在错误时继续执行代码

    我编写了一个 R 脚本 其中包含一个检索外部 Web 数据的循环 数据的格式大多数时候是相同的 但有时格式会以不可预测的方式发生变化 并且我的循环崩溃 停止运行 有没有办法不管错误如何继续执行代码 我正在寻找类似于 VBA 中的 On er

随机推荐