正确地扩展ggplot2?

最近ggplot2的一些简洁的用法已经出现,并且已经发布了部分或完整的解决scheme:

  • ggheat
  • 大括号
  • position_dynamic

ggheat值得注意,因为它只是通过绘制而不是返回对象来打破ggplot隐喻。

花括号的解决scheme是值得注意的,因为没有一个真正符合ggplot2高级概念(例如,你应该指定一个你想要打破的点的范围,然后在别的地方能够指定你想要的范围显示的几何 – 箱子,紫色的牛等)。

ggplot2书 (我将很快下令阅读2个在线章节)似乎是关于使用语法和函数,而不是编写新的或扩展现有的。

我想学习添加一个特定的function或者开发一个新的geom,并且正确地做。 ggplot2可能并不是像grid或基础graphics一样的普通graphics软件包,但是有很多graphics只是现有的ggplot2几何graphics的一个或两个扩展。 当这些情况出现时,我通常可以把足够的东西放在一起做一些事情,但是如果我需要几十次相同的情节呢? 如果其他人喜欢它,并且想要使用它,现在他们每次需要该图时都必须通过相同的过程。 在我看来,正确的解决scheme是添加一个stat_heatplotgeom_heatplot ,或添加一个geom_Tuftebox Tufte箱图等,但我从来没有见过一个实际扩展ggplot2的例子; 只是如何使用它的例子。

有什么资源可以深入挖掘ggplot2并开始扩展它? 我特别感兴趣的是如上所述的在轴上指定范围的高级方法,但对ggplot2打勾的一般知识也是受欢迎的。

如果缺less一个连贯的指导(很less有足够先进的修补,因此在这里可能不存在),如何才能了解内部? 检验来源显然是一种方式,但是起始的function是什么等等。

ggplot2正在逐渐变得越来越可扩展。 开发版本https://github.com/hadley/ggplot2/tree/develop使用roxygen2(而不是两个独立的自制系统),并已经开始从原始到简单的S3类的切换(目前已经完成了coords和scale); 。 这两个改变应该有希望使源代码更容易理解,因此更容易扩展(通过ggplot2的pull请求正在增加的事实来备份)。

下一个版本的另一大改进是Kohske Takahashi对指南系统的改进( https://github.com/kohske/ggplot2/tree/feature/new-guides-with-gtable )。 除了改进默认指南(例如,使用优雅的连续颜色条),他的更改也使得用自己的自定义图例和轴更容易地覆盖默认值。 这样可以在可能属于的轴上绘制花括号。

下一轮重大改变(我可能直到2012年夏天才能解决)将包括重写几何,统计和位置调整,沿着图层包中的草图( https:// github。 com / hadley /图层 )。 这应该使geoms,统计和位置调整更容易编写,并希望培养更多的社区贡献,如geom_tufteboxplot。

我不确定我是否同意你的分析。 我会解释为什么,然后会指出你写一些自己的geoms的资源。

ggheat

据我所知, ggheat返回类ggplot的对象。 因此它是一个围绕ggplot的方便包装,为特定用例定制。 尽pipeqplot更通用,但它原则上也是一样的:它是一个围绕ggplot的包装,它可以对数据做出一些明智的猜测,并select合理的默认值。 哈德利把这种情节称为函数 ,在ggplot2书籍的第181页简要描述了它。

大括号

大括号解决scheme完全符合ggplot理念, ggplot数据与演示分开。 在这种情况下,数据由一个小的自定义函数生成并存储在一个data.frame 。 然后用一个有意义的geom来显示, geom_line

现在呢?

你已经注意到(在r聊天室里 ),你更喜欢用更通用的方法来绘制大括号。 下面的几行(和我一起解释和扩展):

  • 以边界框坐标(即x0,x1,y0和y1)的forms提供数据,
  • 指定一个“统计”,如括号,框或任何
  • 指定一个geom ,比如geom_custom_shape

这听起来像是对大括号解决scheme背后思想的一个很好的概括和扩展,并且显然需要编写一个新的geom。 有一个官方ggplot维基 ,你可以在这里find创build一个新的geom的说明 。

你为什么要扩展它? 动机是什么? 正如我所看到的, ggplot2是一个高级graphics包,旨在从一个特定的数据集产生好的数字。 做正确的事情,让其他的事情变得容易:像秤,传说等ggplot2不是一个通用的graphics工具包。 就像格子一样,它有一个特定的范例,你用它来达到这个目的。

网格是你想用来做一般用途,定制绘图的底层graphics工具包。 和IIRC,向grid或ggplot2图/对象添加grid grobs比较容易,对于这种任意的表示/注解等等。

什么没有太大的意义是扩大ggplot2格子沿你正在思考的路线。 我不明白为什么ggplot2不能这样做,因为它是热点? 还是我在这里错过了什么?

如果ggplot2lattice的数据处理内容可供其他人在其上写入实际的绘图代码,那将是非常有用的。 哈德利曾经在某个地方提过这个。

特别是ggplot2是相当困难的代码进入阅读/理解。 ggplot2使用proto包来处理OOP版本,这意味着你需要了解ggplot2的语义。 是类似的,因为在那里做的语言有很多的计算,如果你不熟悉那种R编程,可以通过相当的威胁,艰巨和难以穿透!

对于网格 ,我build议你看看Paul Murrell的R Graphics图书,这本书的第二版是出版商: http : //www.stat.auckland.ac.nz/~paul/RG2e/

编辑:我打算遇到的一点是,由像ggplot2和格提供的接口提供的接口必须是高层次的。 只要坚持使用的范式/哲学,扩展它们就没有问题。 热图已经可以通过使用现有的geom来完成; ggplot系统的一部分哲学是将数据与显示/显示分开,并以有趣的方式使用geoms来产生所需的显示。

把ggplot + geom调用包装成一个更友好的用户函数是可以的,只要它像ggplot一样工作并返回一个对象,ii)它没有一个和ggplot工作方式不同的接口。 开发人员可以自由地编写任何他们想要的代码,对于更广泛的社区来说,提供与原始工作相距太远的包装是没有帮助的。 这导致了用户的困惑,并没有促进ggplot2本身的学习。

dynamic定位的想法很有趣, 你可以在所有绘图软件包中包含这些想法。 你可以把这个插入到一个geom中,或者作为一个外部函数来修改input坐标来产生一个新的数据对象,这个数据对象可以被相关的geom使用。 同样的function可以用于其他绘图软件包 – 它不需要是ggplot特定的。