包“ ggpp ”提供了一组构建块,扩展了包“ggplot2”(>= 3.5.0) 中实现的图形语法。这些扩展增强了对图中数据标签和注释的支持。位置函数实现了新的微移方法,可用于任何几何体,但与此包中的geom_text_s()
和geom_label_s()
以及包 'ggrepel' (>= 0.9.2) 中的geom_text_repel()
和geom_label_repel()
一起使用特别有用。请参阅:(https://ggrepel.slowkow.com) 了解安装说明和有关版本的新闻。
'ggplot2' >= 3.5.0 通过 R 的恒等函数I()
原生支持归一化父坐标 (NPC)。这种新方法不需要特殊的几何形状,因为它应该适用于几乎所有现有的几何形状。然而,目前这仅在连续变量映射到x和/或y美学时才有效。如果将来将此机制扩展到支持因子和其他离散变量,则“ggpp”中的所有_npc
几何图形都可能变得多余。同时,“ggpp”中的这些特殊几何形状仍然填补了“ggplot2”对 NPC 的支持中的一项空白,尽管规模较小。
映射到x和y美学与数据标签的观察或数据之间的区别在于,数据标签链接到数据的坐标,但它们自己的位置通常在数据附近,但不完全是数据的位置。换句话说,只要可以推断到数据观察的链接,数据标签在x和y坐标中的位置是灵活的。在注释的情况下,绘图区域上的位置是任意的,由可用的图形设计考虑因素和不遮挡数据观察的要求决定。在下表中,我们列出了“ggpp”包中定义的几何图形:1)它们是否用于数据标签、注释或数据,2)它们遵循的美学和伪美学,以及3)它们是否可以连接原始图形数据位置到位移位置。在位移位置和原始位置、观察位置和位移标签之间绘制连接线段或箭头,还需要更改位置函数返回的数据(请参阅下一节)。
几何学 | 主要用途 | 美学 | 部分 |
---|---|---|---|
geom_text_s() | 数据标签 | x、y、标签、大小、系列、字体、颜色、alpha、组、角度、vjust、hjust | 是的 |
geom_label_s() | 数据标签 | x、y、标签、大小、系列、字体、颜色、填充、alpha、线宽、线型、组、vjust、hjust | 是的 |
geom_text_pairwise() | 数据标签 | x、xmin、xmax、y、标签、大小、系列、字体、颜色、alpha、组、角度、vjust、hjust | 水平。 |
geom_label_pairwise() | 数据标签 | x、xmin、xmax、y、标签、大小、系列、字体、颜色、填充、alpha、线宽、线型、组、vjust、hjust | 水平。 |
geom_point_s() | 数据标签 | x、y、大小、颜色、填充、alpha、形状、描边、组 | 是的 |
geom_table() 1 | 数据标签 | x、y、标签、大小、系列、字体、颜色、alpha、组、角度、vjust、hjust | 是的 |
geom_plot() 1 、 geom_grob() 1 | 数据标签 | x、y、标签、组、角度、vjust、hjust | 是的 |
geom_margin_arrow() | 数据标签、刻度标签、数据 | xintercept、yintercept、标签、大小、系列、字体、颜色、alpha、组、vjust、hjust | 不 |
geom_margin_point() | 数据标签、刻度标签、数据 | xintercept、yintercept、标签、大小、系列、字体、颜色、alpha、组、vjust、hjust | 不 |
geom_margin_grob() | 数据标签、刻度标签、数据 | xintercept、yintercept、标签、大小、系列、字体、颜色、alpha、组、vjust、hjust | 不 |
geom_quadrant_lines() 、 geom_vhlines() | 数据标签、刻度标签、数据 | xintercept、yintercept、标签、大小、系列、字体、颜色、alpha、组、vjust、hjust | 不 |
包“ggpp”中定义的几何图形。 1这些几何图形以及geom_text()
和geom_label()
存在 NPC 版本,主要用于绘图注释。
与“ggplot2”中的位置函数相比,“ggpp”包中的所有位置函数在将原始 x 和y坐标移动到新位置时,都能够在data
对象中以不同的名称保留原始x和 y 坐标。这使得它们与此包中的geom_text_s()
、 geom_label_s()
、 geom_point_s()
、 geom_table()
、 geom_plot()
和geom_grob()
兼容。所有这些几何图形都可以绘制连接原始位置和移位位置的线段或箭头。它们保持向后兼容,并且可用于具有position
形式参数的所有几何图形。这类似于包“ggrepel”(<= 0.9.1)中使用的方法,但使用不同的命名约定,允许新的位置函数保持与“ggplot2”向后兼容。从版本 0.9.2 开始,'ggrepel' 包中的几何geom_text_repel()
和geom_label_repel()
与这个新的命名约定完全兼容。
位置函数position_nudge_keep()
、 position_nudge_to()
、 position_nudge_center()
和position_nudge_line()
实现不同风格的微移。最后两个函数可以应用根据数据点相对于任意点或线的相对位置,或者相对于即时拟合到观测值的多项式或平滑样条的相对位置自动变化的微移。
位置函数position_stacknudge()
、 position_fillnudge()
、 position_jitternudge()
、 position_dodgenudge()
和position_dodge2nudge()
分别结合了两个位置函数的作用。它们使得可以轻松地在使用堆叠、闪避或抖动的绘图层中微移标签。函数position_jitter_keep()
、 position_stack_keep()
、 position_fill_keep()
、 position_dodge_keep()
、 position_dosge2_keep()
的行为类似于“ggplot2”中的位置,但在data
对象中保留原始坐标。
位置 | 主要用途 | 排量 | 最常用的是 |
---|---|---|---|
position_nudge_keep() | 轻推 | x、y(固定距离) | 数据标签 |
position_jitter_keep() | 抖动 | x、y(随机) | 点图 |
position_stack_keep() | 堆 | 垂直(绝对) | 柱形图和条形图 |
position_stack_minmax() | 堆 | 垂直(绝对) | 误差线 |
position_fill_keep() | 充满 | 垂直(相对、分数) | 柱形图 |
position_dodge_keep() | 躲闪 | 横向(绝对) | 柱形图和条形图 |
position_dosge2_keep() | 闪避2 | 横向(绝对) | 箱线图 |
position_nudge_to() | 轻推 | x、y(固定位置) | 数据标签 |
position_nudge_center() | 轻推 | x, y(远离或朝向目标) | 数据标签 |
position_nudge_line() | 轻推 | x, y(远离或朝向目标) | 数据标签 |
position_stacknudge() | 堆栈+微移 | 合并,见上文 | 柱形图中的数据标签 |
position_fillnudge() | 填充+微移 | 合并,见上文 | 柱形图中的数据标签 |
position_jitternudge() | 抖动+微移 | 合并,见上文 | 点图中的数据标签 |
position_dodgenudge() | 闪避+轻推 | 合并,见上文 | 柱形图中的数据标签 |
position_dodge2nudge() | 闪避2+轻推 | 合并,见上文 | 箱线图中的数据标签 |
包“ggpp”中定义的位置函数。
统计stat_fmt_tb()
有助于格式化要使用geom_table()
绘制的表格。
四个统计量stat_dens2d_filter()
、 stat_dens2d_label()
、 stat_dens1d_filter()
和stat_dens1d_label()
,根据面板中观测值的局部 2D 密度实现观测值的标记或选择性标记。另外两个统计数据stat_dens1d_filter_g()
和stat_dens1d_filter_g()
按组而不是按绘图面板计算密度。这六个统计数据旨在与“ggrepel”包(>= 0.8.0)中的geom_text_repel()
和geom_label_repel()
很好地配合使用。
统计信息stat_apply_panel()
和stat_apply_group()
对于应用返回数值向量的任意函数非常有用,例如cumsum()
、 cummax()
和diff()
。统计stat_centroid()
和stat_summary_xy()
允许计算x和y上的摘要并将它们传递给 geom。
统计数据stat_quadrant_counts()
和stat_panel_counts()
可以轻松地用观测值数量注释绘图。
统计 | 主要用途 | 常见的几何形状 | 最常用的是 | 计算功能 |
---|---|---|---|---|
stat_fmt_tb() | 格式化和选择 | geom_table() | 表格作为数据标签 | 团体 |
stat_fmt_tb() | 格式化和选择 | geom_table_npc() | 表格作为注释 | 团体 |
stat_dens2d_filter() | 局部二维密度过滤 | geom_text_s() 、 geom_label_s() 、 geom_text() 、 geom_label() | 文本作为数据标签 | 控制板 |
stat_dens2d_label() | 局部二维密度过滤 | geom_text_repel() 、 geom_label_repel() | 文本作为数据标签 | 控制板 |
stat_dens1d_filter() | 局部一维密度滤波 | geom_text_s() 、 geom_label_s() 、 geom_text() 、 geom_label() | 文本作为数据标签 | 控制板 |
stat_dens1d_label() | 局部一维密度滤波 | geom_text_repel() 、 geom_label_repel() | 文本作为数据标签 | 控制板 |
stat_dens2d_filter_g() | 局部二维密度过滤 | geom_text_s() 、 geom_label_s() 、 geom_text() 、 geom_label() | 文本作为数据标签 | 团体 |
stat_dens2d_label_g() | 局部二维密度过滤 | geom_text_repel() 、 geom_label_repel() | 文本作为数据标签 | 团体 |
stat_dens1d_filter_g() | 局部一维密度滤波 | geom_text_s() 、 geom_label_s() 、 geom_text() 、 geom_label() | 文本作为数据标签 | 团体 |
stat_dens1d_label_g() | 局部一维密度滤波 | geom_text_repel() 、 geom_label_repel() | 数据标签 | 团体 |
stat_panel_counts() | 观察次数 | geom_text() 、 geom_label() | 文本作为注释 | 控制板 |
stat_group_counts() | 观察次数 | geom_text() 、 geom_label() | 文本作为注释 | 控制板 |
stat_quadrant_counts() | 观察次数 | geom_text() 、 geom_label() | 文本作为注释 | 控制板 |
stat_apply_panel() | 累积总结 | geom_point() 、 geom_line() 等 | 散点图和线图 | 控制板 |
stat_apply_group() | 累积总结 | geom_point() 、 geom_line() 等 | 散点图和线图 | 团体 |
stat_centroid() | x 和 y 联合摘要 | geom_point() 、 geom_rug() 、 geom_margin_arrow() 等 | 数据汇总 | 团体 |
stat_summary_xy() | x 和 y 联合摘要 | geom_point() 、 geom_rug() 、 geom_margin_arrow() 等 | 数据汇总 | 团体 |
stat_functions() | 从 x 范围计算 y | geom_line() 、 geom_point() 等 | 绘制函数曲线 | 团体 |
包“ggpp”中定义的统计信息。
对齐方式"outward_mean"
、 "inward_mean"
、 "outward_median"
和"inward_median"
实现相对于数据质心而不是数据中心的向外和向内对齐。 "position"
在最接近原始位置的边缘实现对齐。这只适用于使用 'ggpp' 中实现的命名约定保存原始位置的位置函数,否则默认对齐方式将回退到"center"
/ "middle"
。
该包是“ggpmisc”包的“衍生品”,包含最初为“ggpmisc”使用而编写的语法的扩展。随着“ggpmisc”的大小不断增大,有必要将其分成两个包,以便于开发和维护,并便于导入到其他包中。目前,包“ggpmisc”导入并重新导出“ggpp”中的所有可见定义。
下面的图举例说明了“ggpp”使之成为可能或与单独使用“ggplot”相比更容易编码的一些事情。包小插图中提供了其他示例,包括几个组合“ggpp”和“ggrepel”。
library( ggpp )
library( ggrepel )
library( dplyr )
带有插图的绘图。
mtcars % > %
group_by( cyl ) % > %
summarize( wt = mean( wt ), mpg = mean( mpg )) % > %
ungroup() % > %
mutate( wt = sprintf( " %.2f " , wt ),
mpg = sprintf( " %.1f " , mpg )) - > tb
df <- tibble( x = 5.45 , y = 34 , tb = list ( tb ))
ggplot( mtcars , aes( wt , mpg , colour = factor ( cyl ))) +
geom_point() +
geom_table( data = df , aes( x = x , y = y , label = tb ))
带有插图的图。
使用本机绘图坐标 (npc) 定位插图,使用 0..1 范围内的数值以及I()
。
p <- ggplot( mtcars , aes( factor ( cyl ), mpg , colour = factor ( cyl ))) +
stat_boxplot() +
labs( y = NULL , x = " Engine cylinders (number) " ) +
theme_bw( 9 ) + theme( legend.position = " none " )
ggplot( mtcars , aes( wt , mpg , colour = factor ( cyl ))) +
geom_point( show.legend = FALSE ) +
annotate( " plot " , x = I( 0.05 ), y = I( 0.05 ), label = p ,
hjust = " inward " , vjust = " inward " ) +
expand_limits( y = 0 , x = 0 )
表示即时计算并显示为星号。
ggplot( mtcars , aes( wt , mpg , colour = factor ( cyl ))) +
geom_point() +
stat_centroid( shape = " asterisk " , size = 6 )
动态计算的中位数显示为边缘箭头。带有每组观察数的标签。
ggplot( mtcars , aes( wt , mpg , colour = factor ( cyl ))) +
geom_point() +
stat_centroid( geom = " y_margin_arrow " , .fun = median ,
aes( yintercept = after_stat( y )), arrow.length = 0.05 ) +
stat_group_counts( vstep = 0 , hstep = 0.09 )
df <- data.frame ( x1 = c( 1 , 2 , 1 , 3 , - 1 ),
x2 = c( " a " , " a " , " b " , " b " , " b " ),
grp = c( " some long name " , " other name " , " some name " ,
" another name " , " a name " ))
# Add labels to a horizontal column plot (stacked by default)
ggplot( data = df , aes( x2 , x1 , group = grp )) +
geom_col(aes( fill = grp ), width = 0.5 ) +
geom_hline( yintercept = 0 ) +
geom_text(
aes( label = grp ),
position = position_stacknudge( vjust = 1 , y = - 0.2 )) +
theme( legend.position = " none " )
从 CRAN 安装最新的稳定版本(源、Mac 和 Win 二进制文件):
install.packages( " ggpp " )
从类似 R-Universe CRAN 的存储库安装当前不稳定版本(适用于 Mac、Win、Webassemble 和 Linux 的二进制文件,以及可用的源):
install.packages( ' ggpp ' ,
repos = c( ' https://aphalo.r-universe.dev ' ,
' https://cloud.r-project.org ' ))
从 GitHub 安装当前不稳定版本(来自源):
# install.packages("devtools")
devtools :: install_github( " aphalo/ggpp " )
该包的 HTML 文档(包括帮助页面和用户指南)可在 (https://docs.r4photobiology.info/ggpp/) 上找到。
有关更新的新闻发布在 (https://www.r4photobiology.info/)。
Aphalo (2020) 的第 7 章和 Aphalo (2024) 的第 9 章解释了“ggplot2”中实现的图形语法的基本概念以及该语法的扩展,包括包“ggpp”和“ggpmisc”提供的几个扩展'。与本书相关的信息可在 https://www.learnr-book.info/ 上找到。
请在 (https://github.com/aphalo/ggpp/issues) 报告错误并请求新功能。欢迎请求请求 (https://github.com/aphalo/ggpp)。
如果您使用此包来制作科学或商业出版物,请按照以下方式引用:
citation( " ggpp " )
# > To cite package 'ggpp' in publications use:
# >
# > Aphalo P (2024). _ggpp: Grammar Extensions to 'ggplot2'_. R package
# > version 0.5.8-1, <https://CRAN.R-project.org/package=ggpp>.
# >
# > A BibTeX entry for LaTeX users is
# >
# > @Manual{,
# > title = {ggpp: Grammar Extensions to 'ggplot2'},
# > author = {Pedro J. Aphalo},
# > year = {2024},
# > note = {R package version 0.5.8-1},
# > url = {https://CRAN.R-project.org/package=ggpp},
# > }
作为包“ggplot2”的扩展,包“ggpp”中的一些代码是通过使用“ggplot2”中的图层函数和比例作为模板创建的。 “ggpp”的用户界面旨在尽可能与“ggplot2”和图形分层语法保持一致(Wickham 2010)。 “ggplot2”中添加的新功能会在与“ggpp”相关时添加,例如支持翻转图层的orientation
。因此,该软件包间接包含了“ggplot2”的几位作者和维护者的重要贡献,列于 (https://ggplot2.tidyverse.org/)。
通过友好的思想交流以及 Kamil Slowikowski 对“ggpp”和我自己对“ggrepel”的相互贡献来协调开发,使这两个软件包完全相互兼容。
Aphalo, Pedro J. (2024)学习 R:作为一种语言。第 2 版。 R系列。博卡拉顿和伦敦:查普曼和霍尔/CRC Press。 ISBN:9781032516998。466 页。
Aphalo, Pedro J. (2020)学习 R:作为一种语言。第 1 版。 R系列。博卡拉顿和伦敦:查普曼和霍尔/CRC Press。 ISBN:9780367182533。350 页。
威克姆、哈德利. 2010.“图形的分层语法。”计算与图形统计杂志 19 (1): 3–28。 https://doi.org/10.1198/jcgs.2009.07098。
© 2016-2024 Pedro J. Aphalo ([email protected])。根据 GPL 版本 2 或更高版本发布。本软件不提供任何形式的保证。