2011-08-11 8 views
35

最近ggplot2のいくつかのきちんとした使い方が出ている、と部分的または完全のいずれかの解決策が掲載されています:ggplot2を正しく拡張しますか?

ので、それはむしろggheatが注目されますオブジェクトを返すのではなくプロットするだけでggplotのメタファを破壊します。

ggplot2の高水準のコンセプトにはまったく合致しないため、中括弧の解決策は注目に値します(たとえば、分割したい点の範囲を指定してから、必要な方法の幾何を指定する必要があります中括弧、ボックス、紫色の牛など)が表示されます。

(私はすぐにご注文されますと2つのオンラインの章を読んだことがある)ggplot2 bookは文法や機能を使用してではなく、新しいものを書いたり広範囲に既存のものを拡張する程度のようです。

私は、特定の機能を追加したり、新しいgeomを開発して正しく実行する方法を学びたいと思います。 ggplot2は、gridやベースグラフィックスと同じように一般的なグラフィックスパッケージではないかもしれませんが、既存のggplot2 geomから1ステップまたは2エクステンションだけのグラフがたくさんあります。これらの状況が現れたとき、私は通常、一度何かをするのに十分なオブジェクトをまとめることができますが、同じプロットが数十回必要な場合はどうすればいいでしょうか?他の人が好きで、それを使いたいと思ったら、今度は、そのグラフを必要とするたびに同じプロセスを繰り返す必要があります。適切な解決策は、stat_heatplotgeom_heatplotを追加すること、またはTufte box plotsなどにgeom_Tufteboxを追加することです。しかし、実際にggplot2を拡張する例は見たことがありません。どのようにそれを使用する方法の例。

ggplot2をさらに深く掘り下げて拡張するためには、どのようなリソースが必要ですか?私は特に上記のように軸上の範囲を指定する高度な方法に興味がありますが、ggplot2を何にするかについての一般的な知識も歓迎します。

一貫性のあるガイドがありません(十分に進歩したためにはほとんど存在しないため、ここには存在しないかもしれません)、内部についてどのように学習しますか?ソースの検査は明らかに1つの方法ですが、どのような機能が必要ですか?

+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は、2つの別々の自家製システムの代わりにroxygen2を使用し、protoからより簡単なS3クラス(現在は索引およびスケール用に完成)への切り替えを開始しました。これらの2つの変更は、ソースコードを理解しやすくし、他の人が簡単に拡張できるようにしたいと考えています(ggplot2のプルリクエストが増加しているという事実によってバックアップ)。

次のバージョンに含まれるもう1つの大きな改善点は、ガイドシステム(https://github.com/kohske/ggplot2/tree/feature/new-guides-with-gtable)の改良である高橋耕司さんです。デフォルトのガイド(エレガントな連続カラーバーなど)を改善すると同時に、彼の変更により、独自のカスタム凡例と軸でデフォルトをオーバーライドすることも容易になりました。これにより、おそらく属している軸に中括弧を描くことが可能になります。

次の大きな変更は、2012年夏までは対応できません。レイヤパッケージ(https://github.com/hadley/layers)のスケッチの線に沿って、ギミック、統計、位置調整の書き換えが含まれます。 。これにより、ギオム、統計、位置調整を書くのがはるかに簡単になり、geom_tufteboxplotなどのより多くのコミュニティ貢献を促進することができます。

+1

このようなサウンドは1.1.0で実現する予定です。ありがとう@ハドリーと残りのggplot2チーム。それはビネットのように見える( "extend-ggplot2")拡張方法を説明します。 –

+1

公式の拡張メカニズムは2.0.0で利用可能http://blog.rstudio.org/2015/12/21/ggplot2-2-0-0/ –

5

なぜそれを拡張しますか?動機は何ですか?私が見る通りggplot2は、特定のデータセットから素晴らしい数字を生成するように設計された高水準のグラフィックスパッケージを意味します。スケールや伝説など、物事を正しく行い、他のものを簡単にする。ggplot2は、汎用グラフィックツールキットではありません。 格子のように、それは特定のパラダイムを念頭に置いており、その目的のために使用します。

グリッドは、汎用のカスタマイズされたプロットを行うために使用する基本的なグラフィカルツールキットです。また、IIRCでは、この種の任意の表記/注釈などのためにグリッドグローブを格子に追加するのは比較的簡単です。格子またはggplot2プロット/オブジェクト

あまり意味は、あなたが考えている線に沿ってggplot2または格子を拡張して何をすることはありません。私はなぜggplot2はヒートプロットをそのまま行うことができないのか分からないのですか?または私はここに何かを逃していますか?他の人が上に実際の描画コードを記述するためggplot2または格子のデータ処理根性が利用可能であれば非常に有用であろう何

は次のようになります。ハドリーは以前これをどこかで言及してきました。

ggplot2、特に、および格子は理解/読み取るために取得することは非常に難しいコードです。 ggplot2あなたはそれがggplot2セマンティクスとしてよくやっているかを理解する必要があることを意味OOPのバージョン、のためプロトパッケージを使用しています。 格子は、あなたがRプログラミングのようなものに精通していない場合、非常に威圧的で、困難で侵入できないということで、そこで行われた言語に多くのコンピューティングがあるのと同じです! グリッドについては

、私はあなたがポール・マレルのRグラフィックブック、出版社とされた第2版を見てお勧め:http://www.stat.auckland.ac.nz/~paul/RG2e/

編集:私は全体の取得しようとしてポイントをということでしたggplot2やlatticeのようなパッケージによって提供されるインタフェースは必然的に高水準です。それらを拡張することは、使用中のパラダイム/哲学に固執している限り、問題ありません。ヒートプロットは既存のギオムを使用して既に作成することができます。 ggplotシステムの哲学の一部は、データをディスプレイ/プレゼンテーションから分離し、興味のある方法でgeomを使用して所望のディスプレイを生成することです。

ベースggplot + geomの呼び出しをより使いやすい関数にラップすることは、i)ggplotが既に行い、オブジェクトを返すように動作し、ii)それとあまりにも異なるインタフェースを持たない限りOKです。 way ggplotが動作します。開発者は自由に任意のコードを書くことができます。元の作業から離れすぎるラッパーを提供することは、広範なコミュニティにとって役立たないだけです。これはユーザーの混乱を招き、ggplot2自体の学習を促進しません。

動的配置の考え方は興味深いものです。すべてのプロットパッケージにこれらのアイデアを含めることができます。これをジオメトリにボルトで固定するか、入力座標を変更して関連するジオムで使用できる新しいデータオブジェクトを生成する外部関数として使用できます。同じ機能を他のプロットパッケージにも使用できます.ggplot固有のものである必要はありません。

+0

以前はMurrellの本は見たことがありませんでした。私がグリッドの内部でうんざりしていたときには便利でした。あなたのポイントのいくつかに対処するための明確な質問。 –

+2

ハドレーは、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のラッパーであり、データについての情報に基づいた推測を行い、賢明なデフォルトを選択します。Hadleyはこれをプロット関数と呼び、ggplot2本の181ページで簡単に説明しています。

中括弧

中括弧ソリューションはggplot哲学が言うんまさに、プレゼンテーションからすなわち別々のデータ。この場合、データは小さなカスタム関数によって生成され、data.frameに格納されます。それは意味を成すgeom、すなわちgeom_lineを使って表示されます。

quo vadis?

中括弧をプロットするためのより一般的な方法をお勧めします(r chat room)。以下の線に沿って何か(と私は言い換えと同時に延長):バウンディングボックスの座標の形で

  • サプライ・データ(X0、X1、Y0およびY1)
  • は、「統計の指定します」このようなブレース、ボックスまたは任意の
  • これは、中括弧ソリューションの背後にあるアイデアの素敵な一般化と拡張のように聞こえる、と明確に新しいGEOMを書くことが必要になり、このようなgeom_custom_shape

として、geomを指定するよう。公式ggplot wikiがあり、ここにcreating a new geomの説明があります。

+1

+1&Acceptは、新しいGeomページを作成するためのリンクで、 'proto'上のいくつかの良い参照にリンクしています。そのうち@Gavinは重要性を説明しました。 –

+0

新しいgeomを最新にするための手順は上記のリンク先ですか?そして、CRANに提出されるパッケージに新しい幾何学を含めるために推奨されるプラクティスは何ですか? –

関連する問題