あなたが発見したように、これに対する簡単な解決策はありませんが、それはたくさん出てきます。このようなことはよく聞かれるので、なぜこれが難しいのかを説明し、解決策を提案するのに役立ちます。
私の経験では、ggplot2またはラティスグラフィックスに来る人々は、ファセット(またはラティスではトレリス)の目的を根本的に誤解しています。この機能は、共通のスケールを共有する複数のグループにわたるデータの視覚化という非常に具体的なアイデアを念頭に置いて開発されました。それは、タフテらによって支持された、小さな倍数の原理と呼ばれるものから来ています。
非常に異なるスケールでパネルを並べて配置することは、せいぜい誤解を招く可能性があるため、ビジュアルデザインの専門家が避けがちなことです。(私はここであなたを叱るのではなく、理論的根拠を説明するだけです...)
しかしもちろん、この優れたツールを公開すると、人々がそれをどのように使用するのかがわかりません。そのため、それは引き伸ばされます。スケールをパネルごとに変更できるようにし、プロットのさまざまな側面をパネルごとに個別に設定できるようにする機能が求められます。そのため、ggplot2のファセットは、本来の意図をはるかに超えて拡張されています。
この結果の1つは、機能の元の設計意図のために、実装が難しいものがあることです。これはおそらくそのような例の1つです。
わかりました、十分な説明。これが私の解決策です。
ここでの秘訣は、スケールを共有するグラフをプロットしていないことを認識することです。私にとって、それはあなたがファセットを使うことを全く考えるべきではないことを意味します。代わりに、各プロットを個別に作成し、それらを1つのプロットにまとめます。
library(gridExtra)
p1 <- ggplot(subset(melted.df,variable == 'dollars'),
aes(x = value)) +
facet_wrap(~variable) +
geom_density() +
scale_x_log10(labels = dollar_format())
p2 <- ggplot(subset(melted.df,variable == 'counts'),
aes(x = value)) +
facet_wrap(~variable) +
geom_density()
grid.arrange(p1,p2)
私はgeom_*
あなたが何を使いたいかを推測しました、そしてこれはあなたが実際にプロットしたかったものではないと確信していますが、少なくともそれは原理を示しています。