私はggplotを使ってスケーリングに興味深い問題に遭遇しました。デフォルトのリニアスケールを使ってグラフを作成することができるデータセットがありますが、scale_y_log10()を使用すると数字が途切れてしまいます。ここにいくつかのコード例と2つの画像があります。リニアスケールの最大値は〜700で、ログのスケーリングは10^8の値になります。データセット全体が〜8000項目しかないので、何かが正しくないことを示しています。ggplot scale_y_log10()issue
この問題は、私のデータセットとビンニングの構造と関係があり、このエラーを 'diamonds'のような共通データセットに複製できないと思います。しかし、私はトラブルシューティングの最善の方法は不明です。
おかげで、 ザックのCP
編集:
example_1 = ggplot(diamonds, aes(x=clarity, fill=cut)) +
geom_bar() + scale_y_log10(); print(example_1)
#data.melt is the name of my dataset
> ggplot(data.melt, aes(name, fill= Library)) + geom_bar()
> ggplot(data.melt, aes(name, fill= Library)) + geom_bar() + scale_y_log10()
> length(data.melt$name)
[1] 8003
:bdamarestは、このようなダイヤモンドのデータセットのスケールの問題を再現することができます
ここにいくつかのサンプルデータがありますが、私はその問題を見ると思います。元の溶けたデータセットは〜10^8行の長さになっている可能性があります。たぶん行番号が統計に使用されているのでしょうか?
> head(data.melt)
Library name group
221938 AB Arthrofactin glycopeptide
235087 AB Putisolvin cyclic peptide
235090 AB Putisolvin cyclic peptide
222125 AB Arthrofactin glycopeptide
311468 AB Triostin cyclic depsipeptide
92249 AB CDA lipopeptide
> dput(head(test2))
structure(list(Library = c("AB", "AB", "AB", "AB", "AB", "AB"
), name = c("Arthrofactin", "Putisolvin", "Putisolvin", "Arthrofactin",
"Triostin", "CDA"), group = c("glycopeptide", "cyclic peptide",
"cyclic peptide", "glycopeptide", "cyclic depsipeptide", "lipopeptide"
)), .Names = c("Library", "name", "group"), row.names = c(221938L,
235087L, 235090L, 222125L, 311468L, 92249L), class = "data.frame")
UPDATE:
行番号は問題ではありません。ここで、同一のデータが同一のAES x軸を使用してグラフ化し、色を記入し、スケーリングは完全に正しいである:
> ggplot(data.melt, aes(name, fill= name)) + geom_bar()
> ggplot(data.melt, aes(name, fill= name)) + geom_bar() + scale_y_log10()
> length(data.melt$name)
[1] 8003
ありがとうブライアン、私はあなたに詳細な説明をいただきありがとうございます。 geom_bar(position = "dodge")を使用することもできます(Winston Changの回答あり) – zach
ここで何が起こっているのかをもう少し詳しく知るために、積み上げ棒グラフは通常、棒の高さをカウントの合計に等しくします。しかし、sum(log(counts))はlog(product(counts))に相当します。言い換えれば、あなたはカウントを一緒に掛けたかのようにバーの高さが表示されます。 – Brian