25

3x1 ファセットを視覚化するために、時間の経過とともにいくつかの測定値をキャプチャするデータフレームがあります。ただし、各メジャーには、カスタム変換とラベル付けスキームの恩恵を受けるさまざまな単位/スケールが含まれています。

ですから、私の質問は次のとおりです。ファセットごとに単位とスケールが異なる場合、カスタム フォーマッタまたは変換 (つまり、log10) をファセット内の特定の軸に指定するにはどうすればよいですか?

たとえば、次のデータがあるとします。

df = data.frame(dollars=10^rlnorm(50,0,1), counts=rpois(50, 100))
melted.df = melt(df, measure.var=c("dollars", "counts"))

2x1 のファセットを設定して、データと一緒に、またはデータに対して、インデックスにドルとカウントを表示するにはどうすればよいでしょlabels=dollarsscale_y_continuous(trans = "log10", ...)df$dollars?

ありがとうございました!

4

1 に答える 1

47

あなたが発見したように、これに対する簡単な解決策はありませんが、それはたくさん出てきます。このようなことはよく聞かれるので、なぜこれが難しいのかを説明し、解決策を提案するのに役立ちます。

私の経験では、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_*あなたが何を使いたいかを推測しました、そしてこれはあなたが実際にプロットしたかったものではないと確信していますが、少なくともそれは原理を示しています。

于 2012-07-20T20:20:33.167 に答える