問題タブ [gtable]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - デュアル y 軸 ggplot でファセットを使用する方法
ここからシナリオを拡張して、ファセット (具体的にはfacet_grid()
) を利用しようとしています。
私はこの例を見てきましたが、私geom_bar()
のgeom_point()
コンボではうまくいかないようです。facet_wrap
からに変更したばかりの例のコードを使用しようとしましたが、facet_grid
これも最初のレイヤーが表示されないように見えました。
私はグリッドとグロブに関しては非常に初心者なので、誰かが P1 を左の y 軸で表示し、P2 を右の y 軸で表示する方法についてガイダンスを与えることができれば、それは素晴らしいことです.
データ
p1 & p2
結合を試みます (上記のリンクの例に基づく) これは最初の for ループで失敗します。チャートの)
実行可能にしようとする編集facet_wrap
次のコードは引き続きfacet_grid
使用できますggplot2 2.0.0
r - facet_grid ggplot で x 軸ラベルを強制する: 行ごとに異なる x 軸ラベル
「facet_grid プロットのすべての面に対して X 軸のテキストを強制的にオンにする」という投稿で、私の質問に対する解決策の大部分を見つけることができて、とてもうれしく思いました。
2 行以上のファセットがあることを除いて、OP の Drew Steen のものに似たグラフを作成したいと思います。また、行ごとに異なる x 軸ラベルを作成したいと考えています。
私は @baptiste の素晴らしい回答から超ハックなソリューションを作成しました (ほとんどの場合、私は gtable パッケージに慣れていないため)、知りたいです:
- 以下に書いた混乱よりもエレガントな解決策があれば
- 「プレミアム」(中)行のラベルを挿入する方法。
これは、@Drew Steen と @baptiste から採用したコードです。
r - grid と gtable を使用して ggplot を解体する
オブジェクトに基づいて二重軸プロットを作成するのに苦労していggplot
ます。バティストの提案で、私は問題を小さな部分に分解しました。現在の問題は次のとおりです。
grobs
軸、軸ラベル、軸の目盛り、およびグリッド線を保持しながら、からすべてのデータを削除する方法は?geom_line()
「データ」とは、およびに関連付けられたデータを意味しますgeom_points()
。
これを行う理由は、二重軸プロットを作成する過程で、次の問題に遭遇したためです: 1 つのグロブからのグリッド線が他のグロブからのデータを上書きします。データの線と点を削除することにより、上書きはありません。
はっきりさせておきます: aes() に線種を追加し、scale_linetype_manual(values = c("solid", "blank") を設定するか、代わりにデータを「グリッド外」に送信するという回避策がありますが、当面の目的のためにあまり「グルーミング」されていないプロットオブジェクトを後処理したいと思います。
いくつかのコードと図の下。
以下のプロットでは、行を削除したいと思います!
編集:バティストの提案に従って、データ層を削除しようとしました。ただし、BondedDust がコメント セクションで指摘しているように、これにより ggplot オブジェクトが壊れます。
ggplot オブジェクトからデータを削除すると、それが破棄されます。アプリケーションで使用した回避策の 1 つは、「グリッドからデータを送信する」ことです。たとえば、各セルに -999999 を掛けて、表示を で切り捨てますが、可能であれば+ scale_y_continuous(limits = c(1, 10))
、この醜いハックを避けたいと思います。すべてのデータ ポイントを NA または NULL に置き換えても、関連する gtable が破棄されないことを期待していたので、p オブジェクトではなく g オブジェクト内からデータを削除する方法を探していました。
grobs を操作した後 (ggplot オブジェクトを直接ハッキングするのではなく)、結果は次のgrid.draw(g)
ようになります。
参考までに、2 番目のプロットは次の回避策で取得されました。
r - gtable 内の ggplot の要素を置き換える: ラベルとグリッド線
ggplot
でオブジェクトを操作することを学んでいますgtable
。[これは私が尋ねた関連する質問です: grid と gtable を使用して ggplot を解体する]
現在の問題は次のとおりです。
- ある gtable からさまざまな軸要素を取得し、既存の要素の代わりに別の gtable に配置する方法は? 特に、垂直グリッド線 (および対応する目盛り) を置き換えます。
いくつかのコードと図の下。
ここにp1があります:
ここにp2があります:
以下は、いくつかの p2 要素を含む p1 です。
g1 は緑、g2 は赤です。赤の下軸ラベルと垂直グリッド線を緑のものに置き換えたいと思います。
軸ラベルと軸タイトルの識別には成功しましたが、まだ垂直グリッド線 (および軸の目盛りと軸の水平線も!) を探しています。それらは の中にあると思いpanel
ますが、それらにアクセスして変更する方法は?
以前のコメントで、baptiste はnames(ggplotGrob(p2)[["grobs"]][[4]][["children"]])
さまざまな要素を識別する方法として提案しました。これは以下を返します:
しかし、ここからの取り方がわかりません。また、追加された番号 (.843 など) はセッションごとに変わるため、これらの番号をハードコーディングしない方法を見つけたいと思います。提案をありがとう!
r - ggplot でのグラフの整列と配置
ggplot に 2 つのプロットがあり、軸上に同様の範囲があり、それらを整列させたいと考えています。
使用:
ここでsize='last'
、グリッドが x に対して整列されるようにすると、次のようなレイアウトが得られます。
一番上のグラフは、私が描写したい単純な行に対して過度の垂直範囲を持っています.
私は、次のようなイメージをもっと持ちたいと思っています。
または、g1 チャートを g2 チャートの軸の下に配置します。(一般性のために、どちらかを選択できるようにしたい、または g1 を g2 の上に重ねることさえできるようにしたいとしましょう。
(私の元のモデルは、g1 コンポーネントが y=0 の g2 チャートのレイヤーとして単純に設定された単一のチャートでしたが、そのレイアウトではチャートが雑然として読めないため、元の y=0 を移動する必要があると考えました。要素を別のパネル (つまり g1) に追加します。
最小限の例:
散布図に対してラベル ストリップ (g2) をきれいに配置したいと考えています。g2 ストリップはgeom_text()
要素として元のチャートの一部でしたy=0
が、ラベルがそこに配置されているため、チャートはあまりにも散らかっていました。
r - ggplot2、geom_bar、複数のプロット間でバーのサイズを揃える
1 つの図に収まるようにしようとしているバープロットのセットがあります。複数のプロットで異なる数のバーがあり、それらを に揃える方法がわかりませんfacet_grid
。代わりにgtable
レイアウトに使用しましたが、それは問題を複雑にします。x軸の目盛りを正しく整列させ、バーの幅を同じにする方法がわかりません。
ここで babtiste の優れたトリックを使用して、y 軸の幅を揃えました。プロットの配置は、試行錯誤によって決定されました。ここで提案されている答えは、ファセット内のプロットのバランスが取れている場合にのみ機能するようです。onlyを使用scale_x_discrete(expand = c(0,0))
すると、左上のプロットに影響を与え、問題が悪化するようです。
以下は、問題を再現するためのコードです。バーの幅の違いと、列 1 の行の間の「2」と「5」の位置がわずかにずれていることに注意してください。
実際のデータでは、各プロットに複数のグループがあります。gtable を使用することは必須ではありません。
r - ggplot2: gtable を使用してストリップ ラベルを facet_grid のパネルの上部に移動する
facet_grid
Y軸上のカテゴリ変数をファセットするために使用してグラフィックを作成しています。とfacet_wrap
が必要なため、使用しないことにしました。ラベルが長く、右側に凡例があるため、ラベルをパネルの右側からパネルの上部に移動したいと考えています。space = 'free'
labeller = label_parsed
これは、私が立ち往生している場所を示す例です。
ここで、ストリップ テキストを各パネルの右側から各パネルの上部に移動したいと思います。ストリップ ラベルのグロブを保存し、プロットから削除できます。
しかしrbind
、ラベルがパネルの上部に来るようにグロブを戻すことになると、今は行き詰まっています。
別の可能な解決策は、別の質問で説明されているようにfacet_wrap
、パネルを使用してからサイズを変更することですが、その場合は for がないため、ファセットのラベルを手動で変更する必要があります。labeller = label_parsed
facet_wrap
どちらのアプローチについても提案をいただければ幸いです。
読んでくれてありがとう、
トム
r - 凡例の高さをプロット エリアの高さと同じに設定する方法は?
上に折れ線グラフ、下にヒートマップの 2 つのプロットを配置しました。
ヒートマップの凡例をヒートマップのプロット エリアと同じ高さ、つまり y 軸と同じ長さにしたいと考えています。を使用して凡例の高さとサイズを変更できることはわかっていtheme(legend.key.height = unit(...))
ますが、適切な設定を見つけるまでには多くの試行錯誤が必要です。
凡例の高さを指定して、ヒートマップのプロット領域とまったく同じ高さになり、pdf にプロットするときにその比率を保持する方法はありますか?
私が試したコードで再現可能な例:
私の実際のデータにはさらにいくつかのカテゴリがありますが、要点は同じです。 これは、上記のコードで生成され、私がやりたいことで注釈が付けられた画像です。
前もって感謝します!マールテン
r - facet_wrap と組み合わせたデュアル y 軸
ggplot2の右側に変換されたスケールを配置するにはどうすればよいですか? ggplot2 オブジェクトを gtable で操作およびマージすることにより、同じプロットに 2 つの y 軸を追加する方法が示されました。そこの例から、facet_wrap で動作するように拡張することができました。以下の例を参照してください。
ただし、完璧ではないことが 3 つあります。
- スケールは常に右端に配置されます。最終段のプロットに繋げれば良いのに
scales="free_y"
すべてのプロットに別々に y 軸がある場合 (つまり、 を入れた場合facet_wrap
)は機能しません。- グリッド線 (コメントアウトされている行) をそのままにしておくと、2 番目のプロットのグリッド線が最初のプロットの前に表示されます。
これらの確かに小さな問題を解決するスマートな方法があれば、何かアイデアはありますか?