2016-11-15 9 views
5

मैं अल्फा को गठबंधन करने और ggplot2 भरने की कोशिश कर रहा हूं। यह काम करता है जब मैं geom_bar (या रंग के लिए geom_points) का उपयोग कर रहा हूं, लेकिन जब मैं geom_boxplot का उपयोग कर रहा हूं तो अल्फा लीजेंड काम नहीं करता है।अल्फा और ggplot2 boxplots में किंवदंतियों को भरें?

library(data.table) 
library(ggplot2) 
dt = data.table(x = rep(1:5,6), y = rnorm(30), tag1 = rep(c('hey', 'what'), 15), tag2 = rep(c('yeah', 'yeah', 'so', 'so', 'so'), 6)) 

यह सलाखों के लिए काम करता है:

ggplot(dt[, list(y=mean(y)), by=list(x, tag1, tag2)], aes(x=x, y=y, fill=tag1, alpha=tag2, group=interaction(x,tag1,tag2))) + geom_bar(stat = 'identity', position = 'dodge') 

enter image description here

लेकिन boxplot के लिए नहीं - अल्फा कथा खाली है।

ggplot(dt, aes(x=x, y=y, fill=tag1, alpha=tag2, group=interaction(x,tag1,tag2))) + geom_boxplot() 

enter image description here

एक सरल संस्करण कोई भरण के साथ किया जा सकता है - यह ग्रे/lightgray बार चूक की तरह लगता है, और सफेद/lightwhite को boxplot चूक:

ggplot(dt[, list(y=mean(y)), by=list(x, tag2)], aes(x=x, y=y, alpha=tag2, group=interaction(x,tag2))) + geom_bar(stat = 'identity') 

enter image description here

ggplot(dt, aes(x=x, y=y, alpha=tag2, group=interaction(x,tag2))) + geom_boxplot() 

enter image description here

लेकिन मुझे सच में यकीन नहीं है कि इसे कैसे ठीक किया जाए .. कोई विचार?

उत्तर

3

मुझे यकीन नहीं है कि क्यों ggplot वास्तव में बॉक्सप्लॉट्स के लिए किंवदंती में अल्फा स्तर प्रदान नहीं करता है, लेकिन आप इसे override.aes का उपयोग करके हार्ड कोड कर सकते हैं। (संपादकीय नोट: मुझे बॉक्सप्लॉट या बार प्लॉट के लिए अल्फा सौंदर्यशास्त्र थोड़ा उलझन में मिलता है। भरने वाले रंग से पारदर्शिता को मानसिक रूप से अलग करना मुश्किल है और ग्रे-स्केल अल्फा लीजेंड समस्या को बढ़ाता है, क्योंकि ग्रे में कुछ भी मैप नहीं किया जाता है साजिश।)

किंवदंती की दृश्यता में सुधार करने के लिए नीचे दिए गए कोड में, मैंने alpha किंवदंती से बॉक्स लाइनों को हटा दिया है और पौराणिक कुंजी ऊंचाई बढ़ा दी है। मैंने group तर्क की आवश्यकता को दूर करने के लिए सौंदर्यशास्त्र भी संपादित किया है।

ggplot(dt, aes(x=factor(x), y=y, fill=tag1, alpha=tag2)) + 
    geom_boxplot() + 
    scale_alpha_manual(values=c(0.2,0.7)) + 
    guides(alpha=guide_legend(override.aes=list(fill=hcl(c(15,195),100,0,alpha=c(0.2,0.7)), 
               colour=NA))) + 
    theme(legend.key.height=unit(1,"cm")) 

enter image description here

एक अन्य विकल्प दोनों भरने और अल्फा सौंदर्यशास्त्र के लिए interaction उपयोग करने के लिए होगा, लेकिन यह ggplot पता चला है कि इस मामले में किसी भी रंग शामिल नहीं है:

ggplot(dt, aes(x=factor(x), y=y, alpha=interaction(tag1,tag2)), 
     fill=interaction(tag1,tag2)) + 
    geom_boxplot() + 
    scale_fill_manual(values=rep(hcl(c(15,195),100,65), 2)) + 
    scale_alpha_manual(values=rep(c(0.3, 1), each=2)) + 
    theme(legend.key.height=unit(2,"cm")) 

enter image description here

तो, इसके बजाय आप इसे सौंदर्य भरने के साथ कर सकते हैं, लेकिन रंग विनिर्देश में पारदर्शिता शामिल कर सकते हैं। यह काम करता है, लेकिन, एक बार फिर, क्योंकि दृश्य धारणा में पारदर्शिता और रंग कुछ हद तक intermingled हैं, यह शायद चार अलग-अलग रंगों के साथ जाना बेहतर है।

ggplot(dt, aes(x=factor(x), y=y, fill=interaction(tag1,tag2,sep="-"))) + 
    geom_boxplot() + 
    scale_fill_manual(values=hcl(c(15,195,15,195),100,65, alpha=c(0.4,0.4,1,1))) + 
    theme(legend.key.height=unit(1,"cm")) + 
    labs(fill="Tag 1 - Tag 2") 

enter image description here

+0

धन्यवाद! यह अजीब बात है कि बार और बॉक्सप्लॉट के बीच अलग-अलग व्यवहार हैं, और इसे मैन्युअल रूप से ठीक करना होगा, लेकिन यह निश्चित रूप से काम करता है! मैं मानता हूं कि इस उदाहरण में अल्फा उलझन में है। मेरे अंतिम परिणाम में, मैं सैद्धांतिक परिणाम (पारदर्शी) और नमूना त्रुटि, इत्यादि के कारण प्राप्त होने वाले अधिक गन्दा परिणाम के बीच अंतर करने के लिए अल्फा का उपयोग कर रहा हूं। इसलिए मुझे लगता है * यह अधिक पठनीय है। – benjamin

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