ggplot 中具有对数刻度的等坐标和方形纵横比

2024-01-10

我试图生成一组具有对数轴和两个轴上相同坐标以及正方形纵横比的图。让我们考虑以下假设数据:

set.seed(1)
x <- rnorm(30, 50, 20)
y <- x + 20 + rnorm(30, 0, 10)

通过使用下面的代码,我获得了一个矩形图:

p <- qplot(x, y) + 
  scale_x_continuous(trans = "log2") + 
  scale_y_continuous(trans = "log2") + 
  coord_equal()

现在,如果我尝试使用以下命令将纵横比强制为 1:1theme()函数,它打破了平等坐标系:

p + theme(aspect.ratio = 1)

有没有一种方法可以同时获得相等的缩放比例和方形纵横比,而不意味着手动更改每个图形的限制? 我需要将相同的代码应用于具有不同值和不同限制的整个数据系列。


默认情况下,ggplot2将根据您的数据进行扩展。但大多数scale_xxx函数提供了一个limits您可以微调的参数。使用你上面的例子

p <- qplot(x, y) + 
  scale_x_continuous(trans = "log2", limits=c(8,128)) + 
  scale_y_continuous(trans = "log2", limits=c(8,128)) + 
  coord_equal()
p + theme( aspect.ratio=1 )

您也不需要提供theme如果你用过coord_fixed()代替coord_equal().

p <- qplot(x, y) + 
  scale_x_continuous(trans = "log2", limits=c(8,128)) + 
  scale_y_continuous(trans = "log2", limits=c(8,128)) + 
  coord_fixed( ratio=1 )
p

EDIT #1

没看到你们其中一个随机x点小于8。修改代码

p <- qplot(x, y) + 
  scale_x_continuous(trans = "log2", limits=c(4,128)) + 
  scale_y_continuous(trans = "log2", limits=c(4,128)) + 
  coord_fixed( ratio=1)
p

EDIT #2(根据问题中的额外改写)

如果您希望根据您的数据缩放范围,只需使用range()基本 R 中的函数。因此使用上述变量...

xy.limits <- range( c(x,y) )

p <- qplot(x, y) + 
  scale_x_continuous(trans = "log2", limits=xy.limits) + 
  scale_y_continuous(trans = "log2", limits=xy.limits) + 
  coord_fixed( ratio=1)
p

现在,如果您希望限制为 2 的干净倍数,那么您将必须根据计算值进行一些数据操作xy.limits,它是长度为 2 的数值向量。

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

ggplot 中具有对数刻度的等坐标和方形纵横比 的相关文章

  • 在另一个 Rmd 中运行选定的块

    我已经在源 Rmd 文件中运行了分析 并且希望仅使用few来自源的块 我已经看到了一些关于从源 Rmd 中提取所有块的答案来自另一个 Rmd 中的 Rmd 文件的源代码 https stackoverflow com questions 4
  • 如何更改 Shiny 中 navbarPage 折叠的断点

    我想用shiny navbarPage collapsible TRUE 当在小屏幕上查看我的 Shiny 应用程序时 将导航元素折叠到菜单中 默认情况下 当浏览器宽度小于 940 像素时会触发折叠 有什么方法可以改变这一点 以便在稍大的浏
  • 将数据从 R 导出到 Excel

    我试图将从 R 获得的一些结果导出到 Excel 中 但未成功 我尝试过以下代码 write table ALBERTA1 D ALBERTA1 txt sep t write csv ALBERTA1 ALBERTA1 csv your
  • 从 X、Y、Z 数据、Excel 或其他工具进行 3D 绘图

    我的数据看起来像这样 1000 13 75 2 1000 21 79 21 1000 29 80 02 5000 29 87 9 5000 37 88 54 5000 45 88 56 10000 29 90 11 10000 37 90
  • 使用healpy通过HEALPix像素化制作2D直方图

    数据是天空中物体的坐标 例如如下 import pylab as plt import numpy as np l np random uniform 180 180 2000 b np random uniform 90 90 2000
  • glmnet 未从 cv.glmnet 收敛 lambda.min

    我跑了20倍cv glmnet套索模型以获得 lambda 的 最佳 值 但是 当我尝试重现结果时glmnet 我收到一个错误 内容如下 Warning messages 1 from glmnet Fortran code error c
  • R - 通过覆盖和递归合并列表

    假设我有两个带有名字的列表 a list a 1 b 2 c list d 1 e 2 d list a 1 b 2 b list a 2 c list e 1 f 2 d 3 e 2 我想递归地合并这些列表 如果第二个参数包含冲突的值 则
  • 在 R 中使用 Huggingface Transformer 模型

    我正在尝试在 R 中使用不同的 Huggingface 模型 这是通过 reticulate 导入 Transformer 包来实现的 谢谢 https rpubs com eR ic transfoRmers https rpubs co
  • Mathematica PlotMarkers 中标记的自定义间隔

    我试图在 Mathematica ListLinePlot 的同一个图中绘制多个列表 并使用 PlotMarkers 和 PlotLegend 包来获取最终数字 问题是 Mathematica 为每个点都放置了一个标记 这使得很难判断哪个标
  • 如何根据两个数据框中最近的日期进行匹配?

    假设我有两个数据框 例如 set seed 123 df1 lt data frame bmi rnorm 20 25 5 date1 sample seq Date as Date 2014 01 01 as Date 2014 02 2
  • Matlab:如何在没有颜色分级的情况下绘图?

    我的朋友制作了一个脚本来处理大量数据并绘制各种图表 但是当他运行脚本时 图表根据图例具有不同的颜色 当我这样做时 所有图表都相似 颜色渐变从黑色到红色的 见图 为什么不同以及如何获得不同颜色的图表 带有颜色分级图的 2D 绘图 figure
  • 提取部分字符串值,创建新的列名称,并使数据框宽

    我想提取字符串列的最后一部分 始终用方括号括起来 将它们作为新列的名称 然后将数据从长调整为宽 并用这些值填充新列 例如 如果我有这个数据框 whatihave lt data frame v1 c abc effort def effor
  • R Tidytext 和 unnest_tokens 错误

    对 R 非常陌生 已经开始使用 tidytext 包 我正在尝试使用参数来填充unnest tokens函数 这样我就可以进行多列分析 所以而不是这个 library janeaustenr library tidytext library
  • ggplot 直方图相对于轴的位置不正确

    我试图这样绘制直方图 Todo lo haremos con base en un variable aleatoria Uniforme 0 1 set seed 26 n 10000 U lt runif n n Supongamos
  • 使用许多特殊字符将 R 连接到 HANA 数据库时出现问题

    我在将 HANA 数据读入 R 时遇到问题 我已通过以下方式建立了连接 ch lt odbcConnect HANA uid USER pwd PW 并确认我已通过以下方式连接 sqlTables ch 这会调出我的表格列表 对我想要拉取的
  • 使用 R 交互式更改 Plotly 图像中的轴刻度(线性/对数)

    Goal 创建交互式下拉菜单 按钮来更新 R 中 Plotly 图形的轴比例 Issue 有很多关于创建的文档buttons https plot ly r custom buttons and 对数图 https plot ly r lo
  • 在 Ubuntu Lucid 中从二进制安装 R 包

    我已经使用以下命令在 Ubuntu Lucid 中安装了 R sudo aptitude 安装 r base 当我尝试 install packages 时 它似乎会下载源代码 然后花费很长时间来编译它 我怎样才能像我在 Windows 上
  • 如何一次导入多个 .csv 文件?

    假设我们有一个包含多个 data csv 文件的文件夹 每个文件包含相同数量的变量 但每个文件来自不同的时间 R 中有没有办法同时导入它们 而不必单独导入它们 我的问题是 我有大约 2000 个数据文件需要导入 并且必须使用以下代码单独导入
  • 使用函数参数作为 R 中新数据框的名称

    这很简单 但我已经搜索并未能找到这个小问题的解决方案 我想使用函数的参数作为新数据框的名称 例如 assign dataset lt function dataname x lt c 1 2 3 y lt c 3 4 5 dataname
  • 使用 purrr、broom 从许多单变量模型中获得整洁的输出

    我有一个由二进制结果列组成的数据框 y 和多个独立的预测列 x1 x2 x3 我想运行许多单变量逻辑回归模型 例如y x1 y x2 y x3 并将每个模型的指数系数 比值比 95 置信区间和 p 值提取到数据框 标题的行中 在我看来 使用

随机推荐