2016-10-28 12 views
0

私は色分けした0から4までの因子型ベクトルにggplotを使って地図を提示しようとしています。ベクトルはspat.dataframeという名前のデータフレームにあり、ベクトルはqtです。私がやりたいことは、ベクターに記載されているいずれかをそこアレント場合でも、伝説のオプションのすべてを表示しているためR:未使用のデータレベルをggplotの凡例に追加する方法はありますか?

enter image description here

# plot 
ggplot(spat.dataframe, aes(long,lat,group=group)) + # the data 
    geom_polygon(aes(fill=as.factor(qt))) + # make polygons 
    scale_fill_manual(values = c("0"="#F0F0F0","1"="green","2"="red","3"="blue","4"="purple"), 
        labels = c(paste0("white (",length(spat.dataframe[spat.dataframe$qt==0,]),")"), 
           paste0("green (",length(spat.dataframe[spat.dataframe$qt==1,]),")"), 
           paste0("red (",length(spat.dataframe[spat.dataframe$qt==2,]),")"), 
           paste0("blue (",length(spat.dataframe[spat.dataframe$qt==3,]),")"), 
           paste0("pink (",length(spat.dataframe[spat.dataframe$qt==4,]),")")), 
         drop=F, 
         name=NULL) + 
    theme(line = element_blank(), # remove the background, tickmarks, etc 
      axis.text = element_blank(), 
      axis.title = element_blank(), 
      panel.background = element_blank()) + 
    ggtitle(title) + 
    geom_path(colour = "#6b6b6b", size = .5) + 
    coord_equal() 

私の問題は、伝説部分です。したがって、値は青色と紫色で表示されます。試してみるのが少し難しいかもしれませんが、私はそれを私の姿にしたいので、可能な値の数とその値に関連付けられたポリゴンの数を表示することもできます。したがって、私のベクトルqtの値3と4は、両方ともゼロです(つまり、blue (0)purple (0))。

ご意見をいただければ幸いです。ありがとう。

+1

、あなたがのために色を設定することができますそれらの値は、アルファ(16進色の2つの余分な数字)が「00」、すなわち完全に透明な値'ggplot(mtcars、aes(wt、mpg、color = factor(cyl)))+ geom_point()+ scale_color_manual(値はc(' blue '、'#00000000 '、' red ')) 'です。値が存在しない場合、レベルを表示させるために偽のものをハックすることができると思いますが、より良い方法があるかもしれません。 – alistaire

+0

お返事ありがとうございます!私の基本的な目標は、マップ上にあるかどうかにかかわらず、オプションを表示することでした。別のノートでは、最終的には、後で別の問題にあなたの最初の提案を使用しなければならないと思いますので、そのためにありがとうございます。あなたはそれをハックするために何か方法を見つけなければならないというのは正しいことでした。そして、私はザックの答えがまさにそれをしたと思います。再度、感謝します! – JellisHeRo

答えて

2

ここでは、文書hereから取られたmtcarsの実例があります。つまり、scale_color_manualにはlimitsという引数を使用できます。

下記のコメント後に編集:limits引数は重要なもので、scale_color_manualまたはscale_fill_manualの両方に渡すことができます。あなたが問題に適合するようにするために十分なはず

cols <- c("8" = "red","4" = "blue","6" = "darkgreen", "10" = "orange") 
plot <- ggplot(mtcars, aes(x = mpg, y = wt, colour = factor(cyl))) + geom_point() 
plot + scale_color_manual(values = cols, 
          limits = c("4", "6", "8", "10"), 
          labels = c("this", "is", "my", "test")) 

enter image description here

。それは私はこれがあなたの実際のデータセットをせずに動作することを確認しのために懸命だが、ここではすべき作業のソリューションです:値が存在するが、あなたがそれらを非表示にする場合

cols= c("0"="#F0F0F0","1"="green","2"="red","3"="blue","4"="purple") 

ggplot(spat.dataframe, aes(long,lat,group=group)) + # the data 
    geom_polygon(aes(fill=as.factor(qt))) + # make polygons 
    scale_fill_manual(limits = c("0", "1", "2", "3", "4") 
        values = cols, 
        labels = c(paste0("white (",length(spat.dataframe[spat.dataframe$qt==0,]),")"), 
           paste0("green (",length(spat.dataframe[spat.dataframe$qt==1,]),")"), 
           paste0("red (",length(spat.dataframe[spat.dataframe$qt==2,]),")"), 
           paste0("blue (",length(spat.dataframe[spat.dataframe$qt==3,]),")"), 
           paste0("pink (",length(spat.dataframe[spat.dataframe$qt==4,]),")")), 
        drop=F, 
        name=NULL) + 
    theme(line = element_blank(), # remove the background, tickmarks, etc 
    axis.text = element_blank(), 
    axis.title = element_blank(), 
    panel.background = element_blank()) + 
    ggtitle(title) + 
    geom_path(colour = "#6b6b6b", size = .5) + 
    coord_equal() 
+0

お返事ありがとうございます!あなたの例がうまくいったのは唯一の違いは、使用した値でポリゴンを塗りつぶしたからです。私は 'scale_color_manual'ではなく' scale_fill_manual'を使用しなければなりません。他の誰かが知りたいと思えば、将来の参照のためだけに。再度、感謝します! – JellisHeRo

関連する問題