首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >正确扩展ggplot2?

正确扩展ggplot2?
EN

Stack Overflow用户
提问于 2011-08-11 16:58:13
回答 3查看 3.2K关注 0票数 38

最近,ggplot2出现了一些巧妙的用法,有的部分解决方案,有的完全解决:

ggheat之所以值得注意,是因为它打破了ggplot的隐喻,只绘制对象而不是返回对象。

卷曲支撑解决方案是值得注意的,因为没有一个真正符合ggplot2的高层次概念(例如,您应该指定要中断的点的范围,然后在其他地方能够指定您想要显示的范围的地理位置--支撑、框、紫牛等等)。

ggplot2书 (我很快就会订购并阅读了这2章在线章节)似乎是关于使用语法和函数,而不是编写新的或广泛扩展现有的语法和函数。

我想学习添加一个特定的特性或开发一个新的geom,并正确地完成它。ggplot2可能不像grid或基本图形那样作为一个通用的图形包,但是有许多图形只是现有ggplot2 geom的一个或两个扩展。当出现这些情况时,我通常可以将足够多的对象放在一起做一次,但是如果我需要相同的情节几十次呢?如果其他人喜欢它并且想要使用它--现在他们不得不在每次想要那个图表的时候都要经历相同的过程。在我看来,正确的解决方案是添加一个stat_heatplotgeom_heatplot,或者为图夫特方块地块添加一个geom_Tuftebox等等。然而,我从未见过实际扩展ggplot2的例子,只是如何使用它的例子。

有哪些资源可以深入挖掘ggplot2并开始扩展它?我特别感兴趣的是一种高层次的方法来指定一个轴上的范围,就像上面所描述的那样,但是关于是什么使ggplot2运行起来的一般知识也是值得欢迎的。

没有一个连贯的指南(很少有足够先进的修补,因此这里可能不存在),一个人将如何去了解内部呢?检查源显然是一种方式,但从什么功能开始,等等。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-13 21:34:59

ggplot2正逐渐变得越来越可扩展。开发版本https://github.com/hadley/ggplot2/tree/develop使用roxygen2 (而不是两个独立的本地系统),并且已经开始从proto到更简单的S3类(目前已经完成了共弦和缩放)。希望这两个更改能够使源代码更容易理解,从而使其他人更容易扩展(由于对ggplot2的拉请求增加了备份)。

下一个版本中将包括的另一个重大改进是Kohske对指南系统(https://github.com/kohske/ggplot2/tree/feature/new-guides-with-gtable)的改进。除了改进默认指南(例如,优雅的连续色条)之外,他的更改还使您可以更容易地使用您自己的自定义传说和轴来重写默认设置。这样就有可能在轴上画出花括号,因为它们很可能属于它们的位置。

下一轮的重大变化(我可能要到2012年夏天才能解决)将包括对地理位置、统计数据和位置调整的重写,类似于图层包(https://github.com/hadley/layers)中的草图。这将使geoms、stats和位置调整更易于编写,并有望促进更多的社区贡献,如geom_tufteboxplot。

票数 25
EN

Stack Overflow用户

发布于 2011-08-11 18:03:42

我不确定我是否同意你的分析。我将解释原因,然后向您介绍一些用于编写自己的geoms的资源。

ggheat

据我所知,ggheat返回类ggplot的一个对象。因此,它是一个方便的包装全球图形,定制为一个特定的用例。虽然qplot要通用得多,但原则上也是一样的:它是一个围绕ggplot的包装器,可以对数据进行一些知情的猜测,并选择合理的默认值。Hadley将此绘图函数称为,并在ggplot2书的第181页中对其进行了简要描述。

花括号

卷曲支撑解决方案完全符合ggplot哲学的要求,即将数据与演示分开。在这种情况下,数据由一个小的自定义函数生成,并存储在data.frame中。然后使用有意义的geom (即geom_line )显示它。

寡头?

您已经注意到(在R聊天室中),您希望有一种更通用的方法来绘制大括号。大致如下的内容(我同时解释和扩展):

  • 以包围框坐标(即x0、x1、y0和y1)的形式提供数据
  • 指定“统计”,如括号、方框或其他
  • 指定一个geom,例如geom_custom_shape

这听起来像是对卷曲支撑解决方案背后的想法的一个很好的概括和扩展,显然需要编写一个新的geom。有一个官方的ggplot wiki,您可以在这里找到关于创建一个新的geom的说明。

票数 8
EN

Stack Overflow用户

发布于 2011-08-11 18:01:59

你为什么要扩展它?动机是什么?在我看来,ggplot2是一个高级图形包,旨在从特定的数据集生成漂亮的图形。把事情做好,让其他事情变得简单:比如天平,传说等等。ggplot2并不是一个通用的图形工具包。与一样,它有一个特定的范例,您可以为此目的使用它。

grid是您希望使用的底层图形工具包,用于进行通用、定制的绘图。而IIRC则比较容易将网格grobs添加到ggplot2绘图/对象中,用于这类任意符号/注释等。

没有太多意义的是按照您所想的方式扩展、ggplot2、格子。我不明白为什么ggplot2不能像现在这样做热图?还是我在这里漏掉了什么?

如果、ggplot2、点阵的数据处理内核可供其他人在此基础上编写实际的绘图代码,则非常有用。哈德利以前在某个地方提到过这件事。

尤其是ggplot2是很难理解的代码。ggplot2使用proto包作为OOP的版本,这意味着您需要了解它正在做什么,以及ggplot2语义。是相似的,因为在语言上有很多计算,如果您不熟悉这种R编程,可以通过相当吓人、令人生畏和不可穿透的方式实现!

对于grid,我建议您查看Paul的R图形书,该书的第二版是与发行者:http://www.stat.auckland.ac.nz/~paul/RG2e/

编辑:,我想要讲的一点是,像ggplot2和点阵这样的包提供的接口必然是高级别的。只要它们坚持使用中的范式/哲学,就可以扩展它们。热图已经可以通过使用现有的geoms来完成了;ggplot系统的部分原理是将数据从显示/表示中分离出来,并以有趣的方式使用geoms来生成所需的显示。

将基ggplot + geom调用封装到更友好的用户函数中是可以的,只要我)它的工作方式就像ggplot一样,并返回一个对象;以及( ii)它没有一个与ggplot工作方式有太大区别的接口。开发人员可以自由地编写他们想要的任何代码,只是对于更广泛的社区来说,提供与原来的工作方式太远的包装是没有帮助的。这会导致用户的混淆,也不会促进对ggplot2本身的学习。

动态定位的想法很有趣;您可以将这些想法包含在所有绘图包中。您可以将其绑定到geom中,或者作为外部函数修改输入坐标,以生成一个新的数据对象,可供相关的geom使用。同样的函数也可以用于其他绘图包--它不需要特定于ggplot。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7029906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档