如何很好地重新调整网格图形?

2024-01-25

在准备打印图形时,我经常需要将它们制作得比屏幕上显示的小得多。将图形缩小到只有几厘米的情况并不罕见。带有标准图形包par(cex=...)可以用来缩小整个图以适应这么小的区域,并且看起来仍然成比例。格子包中有类似的东西吗?

基本上,如何以右面板的大小绘制下图,但保留左面板的比例?

这个问题时不时地出现在我身上,它通常让我疯狂地尝试trellis.par.get and trellis.par.set在放弃并使用标准图形(即very乏味)。当发现trellis.par.set(simpleTheme(cex=...))我以为我已经中金了,但似乎没有任何作用。

澄清

我想重新调整图中的所有内容,包括字体大小、边距和刻度大小。很多。我知道我可以简单地调整pdf(height=..., width=...)获得我喜欢的比例,然后在排版中重新缩放它,例如InDesign 或文字处理器,但我觉得如果每个 pdf 都将其预期尺寸嵌入到文件中,我可以更好地控制。


Intro

有多种方法可以缩放格子图元素的大小。一种选择是更改所有需要的参数cex属性,另一个是改变基数fontsize一切都被吸引。您想要的解决方案是后者,您很快就会看到,但了解如何通过以下方式影响绘图的各个组成部分也很有启发性:par.settings参数,因为您可能希望在设置时定制应用于各个组件的相对缩放fontsize.

tl:dr

使用@Andrie's Answer 中的示例图

require(lattice)
plt <- xyplot(decrease ~ treatment, OrchardSprays, groups = rowpos,
              type = "a",
              auto.key = list(space = "right", points = FALSE, lines = TRUE))

Set the fontsize参数,包含组件的列表text and points,它定义了这两个关键绘图元素的基本尺寸,所有其他绘图家具都是从这些元素生成的。

update(plt, par.settings = list(fontsize = list(text = 8, points = 4)))

(在 150px x 200px PNG 光栅设备上渲染)。

设定个别cex地块家具特定项目的参数

需要注意的一件事是,格子图的外观是由返回的整个参数流控制的trellis.par.get()

> thm <- trellis.par.get()
> str(thm, max = 1)
List of 35
 $ grid.pars        : list()
 $ fontsize         :List of 2
 $ background       :List of 2
 $ panel.background :List of 1
 $ clip             :List of 2
 $ add.line         :List of 4
 $ add.text         :List of 5
 $ plot.polygon     :List of 5
 $ box.dot          :List of 5
 $ box.rectangle    :List of 5
 $ box.umbrella     :List of 4
 $ dot.line         :List of 4
 $ dot.symbol       :List of 5
 $ plot.line        :List of 4
 $ plot.symbol      :List of 6
 $ reference.line   :List of 4
 $ strip.background :List of 2
 $ strip.shingle    :List of 2
 $ strip.border     :List of 4
 $ superpose.line   :List of 4
 $ superpose.symbol :List of 6
 $ superpose.polygon:List of 5
 $ regions          :List of 2
 $ shade.colors     :List of 2
 $ axis.line        :List of 4
 $ axis.text        :List of 5
 $ axis.components  :List of 4
 $ layout.heights   :List of 19
 $ layout.widths    :List of 15
 $ box.3d           :List of 4
 $ par.xlab.text    :List of 5
 $ par.ylab.text    :List of 5
 $ par.zlab.text    :List of 5
 $ par.main.text    :List of 5
 $ par.sub.text     :List of 5

其中许多因素会影响所绘制对象的大小和注释中使用的文本。您需要修改所有适当的设置并仅将这些设置作为列表传递给par.settings()。这是缩放 @Andrie 的示例图的示例:

CEX <- 0.5

pset <- list(superpose.symbol = list(cex = CEX),
             plot.symbol      = list(cex = CEX),
             par.sub.text     = list(cex = CEX),
             par.main.text    = list(cex = CEX),
             par.zlab.text    = list(cex = CEX),
             par.ylab.text    = list(cex = CEX),
             par.xlab.text    = list(cex = CEX),
             dot.symbol       = list(cex = CEX),
             box.dot          = list(cex = CEX),
             add.text         = list(cex = CEX),
             axis.text        = list(cex = CEX))
plt2 <- update(plt, par.settings = pset)

使用网格额外包在同一设备上排列两个点阵图,我们可以看到所有这些的效果:

require("gridExtra")  ## loads package:grid too
grid.arrange(plt, plt2, ncol = 2)

导致

所以现在(几乎)一切都已经规模化了。值得注意的一件有趣的事情是,这种方法没有缩放图例中线条的长度,也没有缩放刻度长度。请注意图的大小,每个子图的面积是相同的。然而,我们可以以更小的尺寸绘制整个图像:

这是合理的,并且在基于矢量的设备上渲染效果会更好(例如pdf())比光栅png()我不得不在这里用它来说明。第二个图位于 150 像素 x 200 像素的设备上。

设置底座fontsize控制整体缩放

有一种更简单的方法,那就是通过设置文本和点的基本字体大小fontsize范围。其中默认值是:

> trellis.par.get("fontsize")
$text
[1] 12

$points
[1] 8

这些会影响绘图上的所有内容,因此我们可以缩小它们以达到设置所有其他设置的类似效果。

update(plt, par.settings = list(fontsize = list(text = 8, points = 4)))

产生

这是在相同尺寸上绘制的png()设备如之前的图 2 所示。请注意边距如何调整,以便更好地缩放绘图。因此,我们不仅影响了之前更改的所有设置,还影响了绘图的其他部分(例如间距和刻度线),这些部分也从fontsize设置。同样,在矢量设备上绘制这些将产生更好的输出。

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

如何很好地重新调整网格图形? 的相关文章

  • R 将多个值与向量进行比较并返回向量[重复]

    这个问题在这里已经有答案了 我有一个向量 A 对于 A 的每个元素 我想检查它是否等于第二个向量 Targets 中的任何元素 我想要一个逻辑值向量 其长度为 A 作为返回 也提到了同样的问题here http r 789695 n4 na
  • 如何在knitr和RStudio中为word和html设置不同的全局选项?

    我正在使用 RStudio 0 98 932 和 knitr 1 6 想要为word和html设置不同的全局knitr选项 例如 想要将word的fig width和fig height设置为6 html的fig width和fig hei
  • 为什么数据帧上的 is.vector 不返回 TRUE?

    tl dr R 中的向量到底是什么 长版 R 中很多东西都是向量 例如 数字是长度为 1 的数值向量 is vector 1 1 TRUE 列表也是一个向量 is vector list 1 1 TRUE 好的 所以列表是一个向量 显然 数
  • R 可以创建带有可单击条形图的条形图图像以插入网页吗?

    我知道如何创建条形图 以及如何将其粘贴在网页上 例如 使用hwriteImage in the 作家包 http www embl de gpau hwriter 我想要的是每个栏都是一个在鼠标悬停时突出显示的区域 并且每个栏在单击时都有不
  • R - 计算 bin 中特定值的数量

    我有一个如下所示的数据框 df Value lt c 1 1 0 2 1 3 4 0 0 1 2 0 3 0 4 5 2 3 0 6 Sl lt c 1 20 df lt data frame Sl Value gt df Sl Value
  • Quantmod 的简单功能不再起作用

    我明天要交论文 我收到了一条关于 quantmod 的非常奇怪的错误消息 这是我在过去几周使用这个包时从未遇到过的 我无法导入特定于道琼斯指数 DJI 的数据 我收到以下错误消息 getSymbols DJI src yahoo from
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我
  • 如何在 R 中的 for 循环内将值存储在向量中

    我正在开始使用 R 但我对以下问题感到非常沮丧 我试图将 for 循环内完成的某些计算的值存储到我之前定义的向量中 问题是如何进行索引 因为for循环迭代代码的次数取决于用户的输入 所以变量i不一定要从1开始 它可以从80开始 for举个例
  • `dplyr::_join` 函数的命名向量“by”参数[重复]

    这个问题在这里已经有答案了 我正在写一个函数dplyr join两个数据框by不同的列 第一个数据帧的列名称动态指定为函数参数 我相信我需要使用rlang准引用 元编程 但未能找到可行的解决方案 我很感激任何建议 library dplyr
  • sapply - 保留列名称

    我试图总结数据集中许多不同列 变量 的平均值 标准差等 我已经编写了自己的汇总函数 以准确返回我需要和正在使用的内容sapply立即将此函数应用于所有变量 它工作正常 但是返回的数据帧没有列名 我似乎甚至无法使用列号引用重命名它们 也就是说
  • 在 RcppArmadillo 中将列向量乘以数值标量

    我在编译这个简单的程序时遇到一些麻烦c 代码使用Rcpp和RcppArmadillo包裹 采用以下简单示例 将矩阵的每一列乘以数值标量 code lt arma mat out Rcpp as
  • 在 R 的 for 循环中创建动态命名对象并分配动态值

    我正在尝试创建一套动态命名的新对象 例如 temp2015 使用 for 循环 并存储动态值 具体来说 其他对象的名称 例如 Y2015 和 for 循环中使用的值 例如 2015 在动态命名的新对象中 我不确定为什么下面的代码不起作用 Y
  • 闪亮的应用程序包:css 和所有 www/ 目录内容

    我正在尝试将 Shiny 应用程序转换为 R 包 但我在处理有关 www 目录以及 松散 文件的所有问题时遇到了问题 我闪亮的应用程序运行得很好 但是当我尝试 打包它 时 它不起作用 我闪亮的应用程序目录 my shiny app R ut
  • 在r中的某个阈值处破坏 cumsum() 函数

    例如我有以下代码 cumsum 1 100 我想打破它 如果一个元素 i 1 大于3000 我怎样才能做到这一点 因此 而不是这个结果 1 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 15
  • 在 Shiny 中显示反应式 htmlTable 表格

    我正在制作我的第一个 Shiny 应用程序 但找不到任何有关如何显示使用 htmlTable 包创建的表格的示例 我基本上想在按下按钮时创建一个表格并显示它 Shiny 显示 html 代码而不是表格 我不知道用什么替换服务器部分中的 re
  • R,使用具有两种以上可能性的二项式分布

    我知道这可能是基本的 但我似乎有一个心理障碍 假设您想要计算在一个骰子上掷出 4 5 或 6 的概率 在 R 中 这很简单 sum 1 6 1 6 1 6 这给出了 1 2 这是正确答案 然而 我内心深处 可能应该保留的地方 认为我应该能够
  • 如何按定义的顺序将图像合并到一个文件中

    我有大约 100 张图像 png 我不想手动执行此操作 而是希望将它们按照定义的顺序 基于文件名 并排放置在一个 pdf 中 每行 12 个图像 有人有什么建议吗 我按照下面托马斯告诉我的方法尝试了 它把它们贴在旁边有一个黑边 我怎样才能去
  • R在Windows平台Rstudio上打印data.frames中的UTF-8代码

    当数据框中存在UTF 8字符时 将无法正常显示 例如 以下内容是正确的 gt U6731 1 朱 但是当我将其放入数据框中并打印出来时 它是 gt data frame x U6731 x 1
  • 如何根据 ggplot2 中的汇总数据创建堆积条形图

    我正在尝试使用 ggplot 2 创建堆积条形图 我的宽格式数据如下所示 每个单元格中的数字是响应的频率 activity yes no dontknow Social events 27 3 3 Academic skills works
  • 如何为自定义 S3 类实现提取/取子集 ([ [<-, [[ [[<-)] 函数?

    我有一个自定义的 S3 类foo 它在正常的基础上添加了一些自定义行为data frame foo object lt data frame class foo object lt c foo data frame 对于这个类 还应该有一个

随机推荐