2016-05-21 6 views
0

私が例に似た私のggplot、にカスタム凡例を追加しようとしているggplot:http://docs.ggplot2.org/0.9.2.1/scale_gradientn.html追加カスタム伝説

私はプロットのバーはdf$col列に応じて着色することにしたい、その理由のために私はscale_fill_manualvalues = coloursvを使用しています。

set.seed(1) 
df <- data.frame(log10.p.value = -10*log10(runif(10,0,1)), y = letters[1:10], col = rep("#E0E0FF",10), stringsAsFactors = F) 
#specify color by log10.p.value 
df$col[which(df$log10.p.value > 2)] <- "#EBCCD6" 
df$col[which(df$log10.p.value > 4)] <- "#E09898" 
df$col[which(df$log10.p.value > 6)] <- "#C74747" 
df$col[which(df$log10.p.value > 8)] <- "#B20000" 
#truncate bars 
df$log10.p.value[which(df$log10.p.value > 10)] <- 10 
coloursv <- df$col 
names(coloursv) <- df$col 
p <- ggplot(df, aes(y=log10.p.value,x=y,fill=as.factor(col)))+ 
    geom_bar(stat="identity",width=0.2) + 
    scale_y_continuous(limits=c(0,10)) + 
    theme(axis.text=element_text(size=10)) + 
    scale_fill_manual(values = coloursv)+coord_flip()+ 
    scale_fill_gradientn(colours=c("#EBCCD6","#E09898","#C74747","#B20000","#E0E0FF"), 
         breaks=c(-4,-3,-2,-1,0),guide="colorbar",labels=c(2,4,6,8,10)) 

、何を得ていない:あなたはscale_fill_manual(values = coloursv,guide=F)を持っているとguide=Fが示されているからフィル伝説を防ぐため

enter image description here

答えて

2

あなたは、凡例を取得していません。

一方、scale_color_gradientnは色の美しさを設定しますが、プロットに色彩の美しさはありません。あなたはおそらくscale_fill_gradientを意味しています(この場合、scale_fill_manualも持っていないと思います)。ただし、この文をscale_fill_manualに切り替える場合でも、データ内の値の範囲外の値(ブレーク範囲は-4〜0、データ範囲は0.4〜10)にブレークを設定しています。

df$colを追加しても、プロットされる色は設定されません。 log10.p.valueの異なる範囲に異なるカテゴリ値を持つカテゴリ変数を作成するだけです。カテゴリの値は何でも呼び出すことができ、ggplot2にはカテゴリの名前にかかわらず同じで、カテゴリの数だけに依存するデフォルトのカラーパレットがあります。カテゴリ値が必要な場合は、代わりに以下のようにcut関数を使用できます。ここで

は、さまざまなフィルオプションや伝説を説明するためのいくつかの例です:

# Create log10.p.value categories 
df$log10.p.value.cat = cut(df$log10.p.value, seq(0,10,2)) 

# Fill bars based on log10.p.value.cat 
p1=ggplot(df, aes(y=log10.p.value, x=y, fill=log10.p.value.cat)) + 
    geom_bar(stat="identity", width=0.2) + 
    scale_y_continuous(limits=c(0,10)) + 
    theme(axis.text=element_text(size=10)) + 
    coord_flip() 

以下のプロットが含ま伝説であなたの問題の一つです。 scale_fill_manualの色の順序は、各カテゴリに望ましい色を得るために、log10.p.value.catの対応する値の順序と一致しなければならないことに注意してください。

# Fill bars based on log10.p.value.cat with custom colors 
p1a=ggplot(df, aes(y=log10.p.value, x=y, fill=log10.p.value.cat)) + 
    geom_bar(stat="identity", width=0.2) + 
    scale_y_continuous(limits=c(0,10)) + 
    theme(axis.text=element_text(size=10)) + 
    coord_flip() + 
    scale_fill_manual(values=c("#E0E0FF","#EBCCD6","#E09898","#C74747","#B20000")) 

# Continuous fill gradient based on log10.p.value 
p2=ggplot(df, aes(y=log10.p.value, x=y, fill=log10.p.value)) + 
    geom_bar(stat="identity", width=0.2) + 
    scale_y_continuous(limits=c(0,10)) + 
    theme(axis.text=element_text(size=10)) + 
    coord_flip() 

# Continuous fill gradient based on log10.p.value with custom colors 
p2a=ggplot(df, aes(y=log10.p.value, x=y, fill=log10.p.value)) + 
    geom_bar(stat="identity", width=0.2) + 
    scale_y_continuous(limits=c(0,10)) + 
    theme(axis.text=element_text(size=10)) + 
    coord_flip() + 
    scale_fill_gradientn(colours=c("#EBCCD6","#E09898","#C74747","#B20000","#E0E0FF"), 
         breaks=seq(0,10,2)) 

enter image description here

+0

おかげでたくさんのeipi10。私はscale_fill_manualを使って、プロット内のバーの色がdata.frameの値と一致するようにしました。だから、私はどのように伝説の記入に加えてその権利を取得するのですか? – dan

+0

プロット 'p1a'は' scale_fill_manual(values = c( "#E0E0FF"、 "#EBCCD6"、 "#E09898"、 "#C74747"、 "#B20000")) 'に色を設定します。キーは、 'log10.p.value.cat'の対応するカテゴリと同じ順序で色を配置することです。 'log10.p.value.cat'は要素なので、' levels(df $ log10.p.value.cat) 'からカテゴリの順序を取得できます。私はそれに応じて私の答えを更新しました。 – eipi10