2015-11-17 5 views
8

मैं किंवदंती दिखाने के लिए ggplot को मजबूर करने और एक कारक के लिए रंगों को ठीक करने की कोशिश कर रहा हूं, भले ही किसी श्रेणी में कोई मूल्य मौजूद न हो।जब कोई मूल्य मौजूद नहीं है तो सभी श्रेणियों को दिखाने के लिए फोर्स ggplot किंवदंती

नीचे पुनरुत्पादित उदाहरण में, चित्रा 1 में वांछित X1 और प्लॉट्स की प्रत्येक श्रेणी में कम से कम एक मान है। प्रत्येक किंवदंती लेबल प्लॉट किया गया है और वांछित रंग से मेल खाता है।

उदाहरण के लिए 2, परिवर्तनीय वाई 1 में बनाए गए प्रत्येक श्रेणी में कोई मान नहीं है। नतीजतन, साजिश केवल पहले 4 किंवदंती लेबल दिखाती है और पहले 4 रंगों का उपयोग करती है।

वहाँ यह आंकड़ा है कि इतना है कि cat1 मूल्यों हमेशा लाल कर रहे हैं ggplot सभी आठ कथा लेबल दिखाने के लिए और रंग ठीक करने के लिए, cat2 मूल्यों हमेशा नीले रंग के होते बलों प्लॉट करने के लिए एक रास्ता है, आदि

मैं सब कुछ मैं कोशिश की है सफलता के बिना सोच सकते हैं।

- प्रतिलिपि प्रस्तुत करने योग्य उदाहरण -

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_manual भीतर drop = 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

संबंधित मुद्दे