可以创建插图吗?
我知道当您使用 par( Fig=c( ... ), new=T )
时,您可以创建插图。但是,我想知道是否可以使用 ggplot2 库来创建“插图”图。
更新 1:我尝试将 par()
与 ggplot2 一起使用,但它不起作用。
更新 2:我使用 在 ggplot2 GoogleGroups 找到了一个可行的解决方案grid::viewport()
。
I know that when you use par( fig=c( ... ), new=T )
, you can create inset graphs. However, I was wondering if it is possible to use ggplot2 library to create 'inset' graphs.
UPDATE 1: I tried using the par()
with ggplot2, but it does not work.
UPDATE 2: I found a working solution at ggplot2 GoogleGroups using grid::viewport()
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
本书的第 8.4 节解释了如何执行此操作。诀窍是使用
grid
包的viewport
。Section 8.4 of the book explains how to do this. The trick is to use the
grid
package'sviewport
s.利用 ggplot2 和 Egg 的更简单的解决方案。最重要的是,该解决方案可与 ggsave 配合使用。
Much simpler solution utilizing
ggplot2
andegg
. Most importantly this solution works withggsave
.或者,可以使用
cowplot
Claus O. Wilke 的 R 包(cowplot
是ggplot2
的强大扩展)。作者在 this 中有一个关于在较大图形内绘制插图的示例简介小插图。以下是一些改编代码:Alternatively, can use the
cowplot
R package by Claus O. Wilke (cowplot
is a powerful extension ofggplot2
). The author has an example about plotting an inset inside a larger graph in this intro vignette. Here is some adapted code:'ggplot2' >= 3.0.0 使得添加插图的新方法成为可能,因为现在包含列表作为成员列的
tibble
对象可以作为数据传递。列表列中的对象甚至可以是整个 ggplots...我的包“ggpmisc”的最新版本提供了geom_plot()
、geom_table()
和geom_grob ()
,以及使用npc单位而不是本地数据单位来定位插图的版本。这些几何对象可以在每次调用时添加多个插图并遵守分面,而annotation_custom()
则不然。我从帮助页面复制了示例,该页面添加了一个插图,其中包含主图的放大细节作为插图。或条形图作为插图,取自包小插图。
下一个示例展示了如何将不同的插图添加到多面图中的不同面板。下一个示例使用根据世纪拆分后的相同示例数据。这一特定数据集一旦分割,就会在插图之一中增加一个缺失级别的问题。由于这些图是自行构建的,我们需要使用手动比例来确保颜色和填充在各图中保持一致。对于其他数据集,可能不需要这样做。
'ggplot2' >= 3.0.0 makes possible new approaches for adding insets, as now
tibble
objects containing lists as member columns can be passed as data. The objects in the list column can be even whole ggplots... The latest version of my package 'ggpmisc' providesgeom_plot()
,geom_table()
andgeom_grob()
, and also versions that use npc units instead of native data units for locating the insets. These geoms can add multiple insets per call and obey faceting, whichannotation_custom()
does not. I copy the example from the help page, which adds an inset with a zoom-in detail of the main plot as an inset.Or a barplot as inset, taken from the package vignette.
The next example shows how to add different inset plots to different panels in a faceted plot. The next example uses the same example data after splitting it according to the century. This particular data set once split adds the problem of one missing level in one of the inset plots. As these plots are built on their own we need to use manual scales to make sure the colors and fill are consistent across the plots. With other data sets this may not be needed.
我更喜欢与 ggsave 一起使用的解决方案。经过大量谷歌搜索后,我最终得到了这个(这是定位和调整插入的绘图大小的通用公式。
I prefer solutions that work with ggsave. After a lot of googling around I ended up with this (which is a general formula for positioning and sizing the plot that you insert.
2019年,patchwork包登场,你可以用它来创建
插图
通过使用
inset_element()
函数轻松实现:In 2019, the patchwork package entered the stage, with which you can create
insets
easily by using the
inset_element()
function: