2013-12-10 15 views
6

私は約1年前にこの問題を再訪しています。私は、私の 'colourbar'ガイドを効果的に対数尺度で表示して、それを見てもらうと、ますます濃い青の値がより大きな意味を反映するようにしたいと思います。geom_tileのカラーバーガイドのサイズを変更/手動で入力し、Y軸ラベルを置き換えます。

:私は "colourbar" とは対照的に、 "伝説" として表示することができ、

pz <- ggplot(dat.m, aes(x=variable,y=Category)) + 
    geom_tile(aes(fill=value)) + 
    xlab(NULL) + ylab(NULL) + 
    scale_fill_gradientn(colours=c("#000066","#0000FF","#DDDDDD","white"), 
        values=c(0,0.05,0.050000000000001,1.0), 
        breaks=c(0, 0.000001, 0.01, 0.05, 1), 
        guide = "colourbar") + 
    theme_bw()+ 
    theme(panel.background = element_blank(), 
     panel.border = element_blank(), 
     axis.ticks.x = element_blank(), 
     axis.ticks.y = element_blank()) + 
    theme(legend.position="top", 
     legend.text = element_text(angle=45), 
     axis.text.x = element_text(angle=45) 
) 

colourbar

または:次のコードで

、私は下の画像を生成しますenter image description here

私が本当に望むのは、このようなものです。

enter image description here

私は(scale_fill_gradientn(=トランス)「ログイン」)「=トランス 『ログイン』」を追加しようとしているが、問題が発生する私のデータにゼロがたくさんあります。アイデアがあれば、大変感謝しています!


前の文言:

私は様々な分類のための異なるサンプルのためのp値のヒートマップを作成しようとしています。私はこのプロットに変更したい二つのことがあります。

  1. 私はまだ勾配の完全なスペクトルを維持しながら、伝説のスケールの下端を強調するために、私のgeom_tileプロットの凡例を調整したいと思います - それが対数スケールであるかどうかを調べる方法に似ています。したがって、本質的に1.0から0.05の白から青への移行と、0.05から0.00の青から暗青への移行はほぼ同じ大きさになります。カラーバーガイドを手動で調整できる方法はありますか?

  2. 「空の」行ラベルを削除できるように、y軸の名前を置き換えたいと思います。カテゴリはここでは文字で表されていますが、実際のデータセットでは長い名前です。私はデータを分割してチャックに分割し、各ブロック内のタイルを最も重要なものから重要でないものにするようにデータの「ダミー」行を挿入しました。これにはよりよい解決策があると確信していますが、私はスタックオーバーフローで見つけた他のアイデアの試みに失敗しました!私はscale_y_discreteとラベル付けしようとしましたが、これは上記の順序で混乱します。

これらのいずれかの問題のヘルプは大歓迎です!ここで

sample_heatmap

サンプルデータセットです:

dput(dat.m) 
structure(list(Category = structure(c(12L, 11L, 10L, 9L, 8L, 
7L, 6L, 5L, 4L, 3L, 2L, 1L, 12L, 11L, 10L, 9L, 8L, 7L, 6L, 5L, 
4L, 3L, 2L, 1L, 12L, 11L, 10L, 9L, 8L, 7L, 6L, 5L, 4L, 3L, 2L, 
1L), class = "factor", .Label = c("j", "i", "empty2", "h", "empty1", 
"g", "f", "e", "d", "c", "b", "a")), variable = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L), .Label = c("b2", "c1", "c2"), class = "factor"), 
    value = c(7.40214650772221e-06, 0.0075828339, 0.1825924627, 
    0.0384381317, 0.0440256659, 0.3659284985, 0.9777569144, 1, 
    0.0075828339, 1, 0.2193606406, 0.3659284985, 0.0004289756, 
    0.0011541045, 0.0004289756, 0.4400885491, 0.6121402215, 0.6724032426, 
    0.2735924085, 1, 0.018824582, 1, 0.4386503891, 0.4249526456, 
    1.05094571578633e-05, 0.0027216795, 0.715979827, 0.0050376405, 
    0.7473334763, 0.9053300832, 1, 1, 0.0015392848, 1, 0.039679469, 
    0.0950327519)), .Names = c("Category", "variable", "value" 
), row.names = c(NA, -36L), class = "data.frame") 

そしてここでは私のコードです:

col_blue <- c("#FFFFFF","#000099","#000066","#000033") 
ggplot(dat.m, aes(x=variable,y=Category)) + 
    geom_tile(aes(fill=value)) + 
    xlab(NULL) + ylab(NULL) + 
    scale_fill_gradientn(colours=col_blue, values=c(1,0.05,0.01,0),guide="colorbar") + 
    theme_mary(base_size=12) 

UPDATE:

だから今、私はトンを変更しました彼はそのように以下の結果をコードします。私は達成しようとしているものに近づいていますが、カラーバーの割合を0.05〜0.0の勾配で表示したいと思っています。 (1)ため

col_blue <- c("#FFFFFF","#000099","#000066","#000033") 
ggplot(dat.m, aes(x=variable,y=Category)) + 
    geom_tile(aes(fill=value)) + 
    xlab(NULL) + ylab(NULL) + 
    scale_fill_gradientn(colours=col_blue, values=c(1,0.05,0.01,0), guide=FALSE) + 
    scale_colour_gradientn(guide = "colourbar", limits = c(0,1),breaks=c(1,0.05,0.01,0),values=c(1,0.05,0.01,0),colours=c("#FFFFFF","#000099","#000066","#000033")) 

image2

+1

「theme_mary」はどこから来たのですか? –

+0

これは古いコメントですが、ここで質問を更新したので、答えは - theme_maryは私が以前作成したカスタムテーマでした。私は更新されたコードから削除しました。混乱して申し訳ありません! – ONeillMB1

答えて

0

、単純にプロットする前に(あるいはあなたがそうであるように)空の行を削除するために使用されているデータを修正します。例:ggplot(dat.m[!grepl("^empty", dat.m$Category), ], aes(<etc>...))

(2)の場合、凡例だけの美観をオーバーライドすることができます。ここでは一例であり、あなたの好みに合わせて調整:私たちはguide=FALSEでガイドを表示しないようにscale_fill_gradientnを伝えることができ+ guides(fill=guide_legend(override.aes=list(alpha=1)))

enter image description here

+0

こんにちはリカルド、ご迷惑をおかけいたします。私は#2の問題について私が不明であったと思う。私は実際にそこに空の行があることを望んでいます(実際のデータで分類スキームを分割することです)、ラベルを削除したいだけです。 #1に関しては、私は連続カラースケールを維持したいと考えています。しかし、私はガイド/凡例に0-0.05の勾配と0.05-0の勾配をほぼ同じ長さで表示したいと考えています。 – ONeillMB1

+0

私はこれをもっと明確にしようと、私の記事で第1号に言い直しました。 – ONeillMB1

+0

@ user2145578の場合は、レベルを変更してください。 –

2

、手動c(0,0.1)(または任意の範囲にしたい)に設定された制限と私たち自身を追加します。あなたの第二の点については

ggplot(dat.m, aes(x=variable,y=Category)) + 
    geom_tile(aes(fill=value)) + 
    xlab(NULL) + 
    ylab(NULL) + 
    scale_fill_gradientn(colours=col_blue, values=c(1,0.05,0.01,0), guide=FALSE) + 
    scale_colour_gradientn(guide = "colorbar", limits = c(0,0.1), colours=col_blue) 

enter image description here

、なぜ単にプロットする前に、ソースデータから「空」の行を削除しませんか?

+0

ありがとう、これは役に立ちますが、私が努力しているものではありません。スケールは実際には色の表示とは逆ですが、色のスケールの順序を逆にすることで簡単に修正できます。しかし、私はまだ全体のスケールを表示したい、ちょうど直線的に間隔を置いていない - それは意味がありますか?たとえば、私は0〜0.05、および0.05〜0.00をほぼ同じ比率でガイド/凡例に表示したいと考えています。空の行については、プロット内にスペースが必要なので、空の行を追加しています。私の実際のデータセットには複数のカテゴリのカテゴリがあり、スペースが必要です。 – ONeillMB1

+0

私は上記の問題#1を、私がより明確に達成しようとしているかもしれないと言い返しました。 – ONeillMB1

関連する問題