2016-08-10 9 views
2

太いテールラスタデータを視覚化しようとしていますが、色の範囲を値の範囲に非線形にマッピングしたいと思います。いくつかの同様の質問がありますが、私の特定の問題を実際に解決するものではありません(下記のリンクを参照)。scale_fill_gradientn()で確率的に変換されたカラー分布にカラースケールを変換

library(ggplot2) 
library(scales) 

set.seed(42) 
dat <- data.frame(
    x = floor(runif(10000, min=1, max=100)), 
    y = floor(runif(10000, min=2, max=1000)), 
    z = rlnorm(10000, 1, 1)) 

# colors for the colour scale: 
col.pal <- colorRampPalette(c("#00007F", "blue", "#007FFF", "cyan", "#7FFF7F", "yellow", "#FF7F00", "red", "#7F0000")) 
fill.colors <- col.pal(64) 

は、これは、データが何らかの方法で形質転換されていない場合はどのように見えるかです:

ggplot(dat, aes(x = x, y = y, fill = z)) + 
    geom_tile(width=2, height=30) + 
    scale_fill_gradientn(colours=fill.colors) 

enter image description here 私の質問は this oneまたはthis oneに関連するフォローアップの質問の一種である、とソリューションhereは実際に凡例を除いて、私が望むプロットを正確に生成します:

qn <- rescale(quantile(dat$z, probs=seq(0, 1, length.out=length(fill.colors)))) 
ggplot(dat, aes(x = x, y = y, fill = z)) + 
    geom_tile(width=2, height=30) + 
    scale_fill_gradientn(colours=fill.colors, values = qn) 

enter image description here

今、すなわち凡例が同様変位値に基づくべきである、(今スケールの唯一の赤の部分が表示されている)値の非線形分布を表すために、凡例にカラースケールを望みます。これを達成する方法はありますか?

私はhereが示唆したように、カラースケール内trans引数は、トリックを行うかもしれないと思ったが、それはエラーをスローし、私はいくつかの無限値のqnorm(pnorm(dat$z))結果は(私は完全にかかわらず、機能を理解していない。)ためだと思います。

norm_trans <- function(){ 
    trans_new('norm', function(x) pnorm(x), function(x) qnorm(x)) 
} 
ggplot(dat, aes(x = x, y = y, fill = z)) + 
    geom_tile(width=2, height=30) + 
    scale_fill_gradientn(colours=fill.colors, trans = 'norm') 
> Error in seq.default(from = best$lmin, to = best$lmax, by = best$lstep) : 'from' must be of length 1 

だから、誰が伝説のプロットでクォン・ベースの色分布を持っている方法を知っていますか?

+1

なぜ 'trans =" log "'を使用しないのですか?通常の変換は、対数正規のデータにはあまり意味がありません。そして、虹色の配色は本当に悪い考えです。 #endrainbow –

+0

このおもちゃのデータセットの場合、特定のデータの場合、分位分布を望むだけで、 'trans =" log "'は問題ありません。そして、虹のスケール(と#endrainbowを指してくれてありがとう)のために申し訳ありません、私は特定の大会に一貫している必要がありました... – silkita

+1

問題はラベル付け::であるようです::拡張、おそらくpnormはデータ。 Pnormをplnormに切り替えると、Figureが機能します。または、ブレークを手動で設定します。 –

答えて

1

このコードは、ポルノ変換を使用して手動でブレークします。これはあなたの後のことですか?

ggplot(dat, aes(x = x, y = y, fill = z)) + 
    geom_tile(width=2, height=30) + 
    scale_fill_gradientn(colours=fill.colors, 
         trans = 'norm', 
         breaks = quantile(dat$z, probs = c(0, 0.25, 1)) 
) 
+0

これはエラーをスローします - どのように 'norm_trans'を定義しましたか? – silkita

+0

コードをコピーしました。どのようなエラーが出ますか? –

+0

申し訳ありませんが、私のせいです - norm_trans定義が多すぎますので、これ以上エラーはありません。 – silkita

関連する問題