1. ホーム
  2. r

[解決済み] ggplot2で対数カラースケールを行うビルトイン方法はありますか?

2023-04-10 12:43:31

質問

ビン密度プロットの例を示します。

library(ggplot2)
n <- 1e5
df <- data.frame(x = rexp(n), y = rexp(n))
p <- ggplot(df, aes(x = x, y = y)) + stat_binhex()
print(p)

<イグ

改行が対数間隔になるようにカラースケールを調整できればいいのですが、試しに

my_breaks <- round_any(exp(seq(log(10), log(5000), length = 5)), 10)
p + scale_fill_hue(breaks = as.factor(my_breaks), labels = as.character(my_breaks))

結果は Error: Continuous variable () supplied to discrete scale_hue. breaksは因子を期待しているようで(多分?)、カテゴリ変数を意識して設計されているのでは?

組み込みではない回避策があるので、回答として投稿しますが、ただ単に使い方に迷っているだけかもしれませんね。 scale_fill_hue の使い方に迷いがあるのかもしれません。そして、私が見逃している明らかなものがあれば知りたいのです。

どのように解決するのですか?

はい、そうです。このように trans への引数は scale_fill_gradient を追加しました。これで、適切な凡例とカラースケール、そして簡潔な構文を持つソリューションが得られます。使用方法 p を使い、質問から my_breaks = c(2, 10, 50, 250, 1250, 6000) :

p + scale_fill_gradient(name = "count", trans = "log",
                        breaks = my_breaks, labels = my_breaks)

<イグ

私のもうひとつの答えは、データのより複雑な関数に使うのがベストです。Hadleyのコメントに励まされ、私はこの答えをの下部にある例で見つけました。 ?scale_gradient .