マルチパネル/ファセットプロットでは、パネル間にスペースを入れずにパネルをスカッシュすることが可能な場合が好きです。 theme(panel.spacing=grid::unit(0,"lines"))
を使用しています(Edward Tufteは、パネル間のスペースが視覚効果を損なうだけでなく、データスペースを浪費するため、これが良いと言います)。ファセットされたggplotsの軸目盛ラベルの衝突を避ける
問題はファセットの行/列内の値の正確な範囲に応じて、隣接するファセットの軸ラベルが重なり合う可能性があります。たとえば、このプロットでは、上部パネルの下部ティックラベルと中央パネルの上部ティックラベルとの間に衝突があります。
dd <- data.frame(x=rep(1:3,3),
y=c(0.1,0.2,0.3,
0.1,0.4,0.6,
1,2,3),
f=factor(rep(letters[1:3],each=3)))
library(ggplot2)
ggplot(dd,aes(x,y))+
facet_grid(f~.,scale="free")+
geom_point()+
theme_bw(base_size=24)+
theme(panel.spacing=grid::unit(0,"lines"))
ggsave("tmp1.png",width=4,height=6)
私は、この問題に対する一般的な、便利なソリューションを構築したい - 範囲があるので、(それは、各ファセットごとに異なります適切な量によって、各ファセットの限界を拡張異質)が、極端な値に対しては(少なくとも)ラベルと(おそらく)目盛りを抑制します。私は過去に特別な目的のbreaks
の機能をscale_y_continuous
に設定することで、超ハッキーなやり方でこれをやってきました。私はこれを行うための他の方法を考えているかもしれませんが(私はそれらを働かせることができれば回答として投稿します)、私は、(a)labels
を指定するための、 breaks
。
これは、ファセットで最大/最小値が必要なAutomate tick max and min in faceted ggplotと同じではありません。
これは一般的にやるのは難しいことですが、完全に解決できない可能性があります。私は極端なラベルを空白にすることを考えましたが、2つか3つの目盛ラベルしかなければ失敗します。 expand_limits()
の解決策があるかもしれませんが、それはファセット間で行うことは難しいです...
もggplot2のGitHubのレポ上の問題としてこれを提出すべき。 – coatless
おそらく範囲へのブレークをチェックし、極端なラベルの抑制を引き起こす容認できない最小比率を見つけるためにラベルcexと比較するでしょうか?たぶんあなたの以前のハックのより一般的なバージョンを引き起こしても –
私はこれが役に立たないと知っていますが、本当に残念です** ggplot2 **では、まったく新しい(そして一回限りの)原型を学ばなければなりません)OOシステムはちょうどこのような小さな詳細を変更する。 ** lattice **を使うと、カスタム 'prepanel()'と 'yscale.components()'関数を削除し、それを使って処理できます。私は、ここに提出された解決策を楽しみにしています。 –