2015-11-17 12 views
8

ggplotに凡例を表示させ、範囲に値がない場合でも因子の色を修正しようとしています。値がないときにすべてのカテゴリを表示するようにggplotの凡例を表示する

以下の再現可能な例では、図1は、変数X1の各範囲に少なくとも1つの値を持ち、必要に応じてプロットします。各凡例ラベルがプロットされ、目的の色と一致します。

例2では、​​変数Y1には作成される各範囲の値がありません。その結果、プロットは最初の4凡例ラベルのみを表示し、最初の4色を使用します。私はすべて私を試してみました

そのCAT1値は常に赤になるようggplotは、CAT2値は常に青の色を8つのすべての凡例ラベルを表示し、修正するために強制的にこの図をプロットする方法はあります、など成功なしに考えることができます。

- 再現性の例 -

set.seed(45678) 
dat <- data.frame(Row = rep(x = LETTERS[1:5], times = 10), 
        Col = rep(x = LETTERS[1:10], each = 5), 
        Y = rnorm(n = 50, mean = 0, sd = 0.5), 
        X = rnorm(n = 50, mean = 0, sd = 2)) 

library(ggplot2) 
library(RColorBrewer) 
library(dplyr) 

dat <- dat %>% mutate(Y1 = cut(Y, breaks = c(-Inf,-3:3,Inf)), 
         X1 = cut(X, breaks = c(-Inf,-3:3,Inf))) 

# Figure 1 
ggplot(data = dat, aes(x = Row, y = Col)) + 
    geom_tile(aes(fill = X1), color = "black") + 
    scale_fill_manual(values = c("red", "blue", "green", "purple", "pink", "yellow", "orange", "blue"), 
        labels = c("cat1", "cat2", "cat3", "cat4", "cat5", "cat6", "cat7", "cat8")) 

# Figure 2 
ggplot(data = dat, aes(x = Row, y = Col)) + 
    geom_tile(aes(fill = Y1), color = "black") + 
    scale_fill_manual(values = c("red", "blue", "green", "purple", "pink", "yellow", "orange", "blue"), 
        labels = c("cat1", "cat2", "cat3", "cat4", "cat5", "cat6", "cat7", "cat8")) 

答えて

8

あなたはscale_fill_manualdrop = FALSEを使用することができるはずです。それは、より多くの情報については

ggplot(data = dat, aes(x = Row, y = Col)) + 
    geom_tile(aes(fill = Y1), color = "black") + 
    scale_fill_manual(values = c("red", "blue", "green", "purple", "pink", "yellow", "orange", "blue"), 
        labels = c("cat1", "cat2", "cat3", "cat4", "cat5", "cat6", "cat7", "cat8"), 
        drop = FALSE) 

で、?discrete_scale

+0

優れたを参照してください。どうもありがとうございます! – learnmorer

関連する問題