2017-11-08 15 views
1

x変数に欠損値があるデータセットがあります。例えば、以下のデータフレームは181930を示し、610はx変数のフルセット1-7を持ち、一方1044,1114などは1だけを持っています。私は1本の値を持つ細胞を示すggplotを使用してヒートマップを作成したいと思いますggplotヒートマップで空のセルの塗りつぶし色を変更する方法

label xvar value 
181930 1 0 
181930 2 0 
181930 3 1 
181930 4 0 
181930 5 0 
181930 6 0 
181930 7 1 
610 1 0 
610 2 0 
610 3 0 
610 4 0 
610 5 1 
610 6 1 
610 7 0 
1044 1 0 
1114 1 0 
1156 1 1 
1378 1 0 
1834 1 1 

は、これまでの私のコードである、しかし一つだけXVARとラベルの空白のセルを示し、むしろ私はそれを希望0値に一致する色(白)を持つようにします。

ggplot(activeDF,aes(xvar,factor(label)))+ 
    geom_tile(aes(fill=value),colour='white')+ 
    scale_x_continuous(breaks=round(seq(0,7)))+ 
    scale_fill_gradient(high=brewer.pal(10,'PiYG')[8],low='white',na.value = 'white') 

残念ながら、na.valueは私のためには機能しませんでした。こちらの写真は以下のとおりです。 plot

答えて

2

時々簡単な方法を試してみてください。この場合、プロットするすべての組み合わせが含まれるようにデータセットを拡張することはオプションです。

私はこれにtidyr::completeを使用し、パッケージdplyrからのグループ化を使用します。これにより、labelごとに1から7のxvarの行が追加されます。現在行が存在しない場合は、欠損値がNAで埋められます。 NAは十分なようですが、fill引数を使用して欠損値を0などに設定することもできます。

library(dplyr) 
library(tidyr) 

longdf = activeDF %>% 
    group_by(label) %>% 
    complete(xvar = 1:7) 

longdf 

# A tibble: 49 x 3 
# Groups: label [7] 
    label xvar value 
    <int> <int> <int> 
1 610  1  0 
2 610  2  0 
3 610  3  0 
4 610  4  0 
5 610  5  1 
6 610  6  1 
7 610  7  0 
8 1044  1  0 
9 1044  2 NA 
10 1044  3 NA 
# ... with 39 more rows 

拡大されたデータセットを使用すると、プロットはデータの範囲全体に拡大され、タイリングが完了します。提案のための

ggplot(longdf, aes(xvar, factor(label))) + 
    geom_tile(aes(fill = value), colour = 'black') + 
    scale_x_continuous(breaks = round(seq(0, 7))) + 
    scale_fill_gradient(high = brewer.pal(10, 'PiYG')[8], low='white', na.value = 'white') 

enter image description here

+0

すごくうまくいきました。提案していただきありがとうございます! 'scale_fill_gradient'の代わりに' scale_fill_manual'に切り替えることになりました。私の値は0か1です。しかし 'ggplot2'はNA値の凡例を追加します。 'ggplot2'がこの別個の凡例を追加するのを防ぐ方法も知っていますか?前もって感謝します。 –

+0

@SpencerTrinh凡例から 'NA'を取り除くためにあなたの' breaks'を設定できるはずです。 – aosmith

0

ggplot2前プロットにデータセットを操作することであるに何かをするには、この+ theme(panel.background = element_rect(fill = 'white'))

ggplot(activeDF,aes(xvar,factor(label)))+ 
geom_tile(aes(fill=value),colour='white')+ 
scale_x_continuous(breaks=round(seq(0,7)))+ 
scale_fill_gradient(high=brewer.pal(10,'PiYG')[8],low='white',na.value = 'white') + 
theme(panel.background = element_rect(fill = 'white')) 
+0

感謝。しかし、各セルを明確に見るためにアウトラインの色を黒に変更したいのであれば、どうすればこのことができますか?私は 'geom_tile'の' color = 'black''を変更しましたが、空白の空白のセルにはアウトラインがないような問題が発生しました –

関連する問題