2011-08-11 50 views
35

最近有幾個整齊的用途都來了,無論是部分或全部解決方案已經公佈:正確地擴展ggplot2? GGPLOT2的

ggheat是值得注意的,因爲它相當通過繪製而不是返回對象來打破ggplot隱喻。

大括號解決方案值得注意,因爲沒有一個真正適合ggplot2高級概念(例如,您應該指定一個要打破的點的範圍,然後在別的地方能夠指定您想要的幾何點顯示的範圍 - 大括號,框,紫牛等)。

ggplot2 book(我將很快下單並閱讀2個在線章節)似乎是關於使用語法和函數,而不是編寫新的或擴展現有的語法和函數。

我想學習添加一個特定的功能或開發一個新的幾何,並正確地做到這一點。 ggplot2可能不會像grid或基本圖形一樣用作通用圖形包,但有很多圖形只是現有ggplot2幾何圖形的一個或兩個擴展。當這些情況出現時,我通常可以將足夠的物體放在一起做一次事情,但如果我需要幾次相同的情節呢?如果其他人喜歡它並想要使用它 - 現在他們每次需要該圖時都必須通過相同的過程進行混合。這在我看來,正確的解決辦法是在stat_heatplotgeom_heatplot添加或添加geom_TufteboxTufte box plots,等等。但是我從來沒有見過的真正延伸GGPLOT2的例子。只是如何使用它的例子。

有什麼資源可以深入挖掘ggplot2並開始擴展它?我特別感興趣的是如上所述的在軸上指定範圍的高級方法,但對於ggplot2打勾的一般知識也很受歡迎。

缺席連貫引導(而很少存在足夠先進的修修補補,因此這裏不可能存在),一個將如何去學習的內部?檢查來源顯然是一種方式,但有什麼功能開始,等等。

+19

不幸的是,我的R安裝中的makeMeHadley()函數被破壞了。也許如果我嘗試'make_me_hadley()'而不是? –

+2

我在ggplot2 wiki中添加了一個[wishlist page](https://github.com/hadley/ggplot2/wiki/wishlist---feature-requests)來列出各種擴展的想法。 – baptiste

+1

@ AriB.Friedman:這是一個命令還是一個請求?它指向誰? :P – naught101

回答

23

ggplot2正在逐漸變得越來越可擴展。開發版本https://github.com/hadley/ggplot2/tree/develop使用roxygen2(而不是兩個獨立的自制系統),並已開始從原型到簡單的S3類(目前已完成座標和縮放)。這兩個改變應該有希望使源代碼更容易理解,並且因此更容易讓其他人擴展(通過對ggplot2的拉取請求增加的事實來備份)。

Kohske Takahashi對指南系統的改進(https://github.com/kohske/ggplot2/tree/feature/new-guides-with-gtable)將在下一個版本中包含的另一大改進。除了改進默認指南(例如,使用優雅的連續顏色條),他的更改還可以更容易地使用您自己的自定義圖例和軸來覆蓋默認值。這樣可以在可能屬於的軸上繪製花括號。

下一輪重大改變(我可能直到2012年夏季才能解決)將包括重寫幾何圖形,統計數據和位置調整,沿着圖層包中草圖的線條(https://github.com/hadley/layers) 。這應該使geoms,統計和位置調整更容易編寫,並有望促成更多的社區貢獻,如geom_tufteboxplot。

+1

這樣的聲音將在1.1.0中實現。感謝@hadley和ggplot2團隊的其他成員。它看起來像vignette(「extend-ggplot2」)將解釋如何擴展。 –

+1

2.0.0官方擴展機制現已發佈http://blog.rstudio.org/2015/12/21/ggplot2-2-0-0/ –

5

爲什麼要擴展它?動機是什麼?正如我所看到的那樣ggplot2旨在成爲一個高級圖形包,旨在從特定數據集中生成漂亮的圖形。做好事情,讓其他事情變得簡單:像秤,傳說等。ggplot2並不意味着是一個通用的圖形工具包。像它有一個特定的範例,你用它來達到這個目的。

網格是你想用來做一般用途,定製繪圖的底層圖形工具包。和IIRC,它是相對容易添加網格grobs到GGPLOT2圖/對象,這種任意符號/註釋等。

什麼沒有什麼太大的意義是擴大GGPLOT2沿着你所想的線條。我不明白爲什麼ggplot2不能這樣做熱圖,因爲它是?或者我在這裏錯過了什麼?

將是非常有用的會是什麼如果GGPLOT2晶格數據處理膽量是供他人之上編寫實際的繪圖代碼。哈德利曾經在某處提到過這一點。

GGPLOT2,特別是和是相當困難的代碼進入讀/理解。 ggplot2使用proto包的一個版本的面向對象,這意味着你需要了解是做什麼以及ggplot2語義。 是類似的,因爲有很多關於在那裏完成的語言的計算,如果你不熟悉那種R編程,可以通過相當嚇人,艱鉅和難以穿越!

對於電網,我建議你看看保羅的Murrell的R圖形的書,其中的第二版是與出版商:http://www.stat.auckland.ac.nz/~paul/RG2e/

編輯:我正打算穿過指出的一點是,像ggplot2和lattice這樣的包提供的接口必然是高層次的。只要他們堅持使用的範式/哲學,擴展它們就沒有問題。熱圖可以通過使用現有的幾何圖形來完成; ggplot系統的一部分哲學是將數據從顯示/演示中分離出來,並以有趣的方式使用geoms來產生所需的顯示。

包裝基地ggplot + geom調用到一個更友好的功能是好的,只要我)像ggplot一樣工作並返回一個對象,和ii)它沒有一個接口,方式ggplot的作品。開發人員可以自由地編寫他們想要的任何代碼,這對於更廣泛的社區來說,提供與原始工作相距太遠的包裝並沒有什麼幫助。這會導致用戶的困惑,並且不會促進ggplot2本身的學習。

動態定位的想法很有趣;你可以在所有繪圖軟件包中包含這些想法。你可以將這個插入到一個geom中,或者作爲一個外部函數來修改輸入座標以產生一個可以被相關geom使用的新數據對象。同樣的功能可以用於其他繪圖軟件包 - 它不需要是ggplot特定的。

+0

以前沒見過Murrell的書。當我正在使用網格內部時,它會很方便。澄清問題以解決您的一些觀點。 –

+2

我想你會發現Hadley正在做很多工作來將ggplot的至少一些元素變成一個通用工具包。特別是,產生智能秤的工作是一個非常棘手的問題。因此,目前正在進行大量工作,以使ggplot比例尺可用作通用工具以供格子使用。 (例如,參見ggplot2郵件列表http://groups.google.com/group/ggplot2/browse_thread/thread/8f5a1a7513ef0042上的討論) – Andrie

+0

@Andrie - 感謝您的具體信息和鏈接。我已經看到了這些,但是不能把我的手放在他們身上,所以在我的答案中沒有承認哈德利說他會做/正在做什麼。讓ggplot2的一些聰明的內部可用於其他人將是一個非常有用的貢獻。 –

8

我不確定我是否同意你的分析。我會解釋爲什麼,然後會指出一些編寫自己的geoms的資源。

ggheat

據我所知,ggheat返回ggplot類的一個對象。因此它是一個圍繞ggplot的方便包裝,爲特定用例定製。雖然qplot更具通用性,但它原則上的確如此:它是圍繞ggplot的一個包裝,它對數據做出了一些明智的猜測並選擇了合理的默認值。哈德利稱這個繪圖功能,它在ggplot2書的第181頁簡要描述。

花括號

大括號解決方案ggplot哲學說究竟是幹什麼的,即從演示單獨的數據。在這種情況下,數據由一個小自定義函數生成並存儲在data.frame中。然後使用有意義的幾何顯示,即geom_line

quo vadis?

你已經注意到了(在r chat room)你寧願有一個更通用的方法來繪製花括號。大致如下的東西(我意譯,並在同一時間延長):

  • 在邊界框座標的形式供應的數據(即X0,X1,y 0和y)
  • 指定一個「統計」,如括號,箱或任何
  • 指定geom,如geom_custom_shape

這聽起來像是一個不錯的推廣和大括號解決方案背後的理念擴展,並且顯然需要寫一個新的GEOM 。有一個官方ggplot wiki,在那裏你可以找到creating a new geom的說明。

+1

+1&Accept,鏈接到創建一個新的geom頁面,該頁面本身鏈接到'proto'上的一些好的引用,其中@Gavin解釋了它的重要性。 –

+0

說明鏈接到上面的說明是爲了創建一個新的geom?對於將包裝中的新包裝提交給CRAN的建議做法是什麼? –