2014-10-08 15 views
8

मुझे इस प्रकार की साजिश का नाम नहीं पता है (इसके आसपास की टिप्पणियों का स्वागत है)। अनिवार्य रूप से यह एक बारप्लॉट है जिसमें ग्लाइफ होते हैं जो नुकसान/लाभ को इंगित करने के लिए भरे जाते हैं। ग्लिफ दिशा, परिमाण, और बार geom को देखने के लिए अनुमति देने के बारे में एन्कोडिंग जानकारी की तरह तीर है।अंतर साजिश

enter image description here

यह दिलचस्प लग रहा है लेकिन कैसे ggplot2 (ग्रिड ढांचा) में यह करने के लिए नहीं सोच सकते हैं। हम इस प्लॉट को ggplot2/ग्रिड फ्रेमवर्क में कैसे बना सकते हैं (आधार समाधानों के साथ-साथ प्रश्न की पूर्णता के लिए स्वागत किया गया)। विशेष रूप से ग्लिफ, पाठ नहीं, क्योंकि यह पहले से ही ggplot2 में बहुत सीधे आगे है।

यहां डेटा और पारंपरिक ओवरलाइड बनाने के लिए कुछ कोड है & इस प्रकार के डेटा को देखने के सामान्य तरीकों को दिखाने के लिए फ्लिप किए गए डोज़ेड बार प्लॉट्स और लाइन ग्राफ़ को समन्वयित करें।

set.seed(10) 
x <- sample(30:60, 12) 
y <- jitter(x, 60) 

library(ggplot2) 
dat <- data.frame(
    year = rep(2012:2013, each=12), 
    month = rep(month.abb, 2), 
    profit = c(x, y) 
) 


ggplot() + 
geom_bar(data=subset(dat, year==2012), aes(x=month, weight=profit)) + 
geom_bar(data=subset(dat, year==2013), aes(x=month, weight=profit), width=.5, fill="red") 

ggplot(dat, aes(x=month, fill=factor(year))) + 
    geom_bar(position="dodge", aes(weight=profit)) + 
    coord_flip 

ggplot(dat, aes(x=month, y=profit, group = year, color=factor(year))) + 
    geom_line(size=1) 

enter image description here

enter image description here

enter image description here

+0

'annotation_custom'' polygonGrob' के साथ काम कर सकता है। – hrbrmstr

+4

आपके उदाहरण मूल ग्राफ से बेहतर हैं। ग्लिफ सबसे बुरी तरह भ्रमित कर रहे हैं, सबसे खराब पर भ्रामक हैं। – thelatemail

+0

@ thelatemail की तरह कहा! एक ग्राफ पर डेटा के दो अलग-अलग सेट (मूल्य और डेल्टा) को प्लॉट करना आम तौर पर अनुशंसित नहीं है क्योंकि इसे समझना मुश्किल है। –

उत्तर

11

यहाँ एक उदाहरण है, शायद अन्य तरीके हालांकि, कर रहे हैं

dat <- data.frame(
    year = rep(2012:2013, each=12), 
    month = factor(rep(1:12, 2), labels=month.abb), 
    profit = c(x, y) 
) 
dat2 <- reshape2::dcast(dat, month~ year, value.var = "profit") 
names(dat2)[2:3] <- paste0("Y", names(dat2)[2:3]) 

ggplot(dat2) + 
    geom_bar(aes(x=month, y = Y2012), stat = "identity", fill = "grey80", width = 0.6) + 
    geom_segment(aes(x=as.numeric(month)-0.4, xend = as.numeric(month)+0.4, y = Y2013, yend = Y2013)) + 
    geom_segment(aes(x = month, xend = month, y = Y2013, yend = Y2012, colour = Y2013 < Y2012), 
       arrow = arrow(60, type = "closed", length = unit(0.1, "inches")), size = 1.5) + 
    theme_bw() 

enter image description here

+0

बिल्कुल सही। +1 मैं @ thelatemail से सहमत हूं यदि बड़े पैटर्न की तलाश में यह सबसे अच्छा तरीका नहीं हो सकता है। मुझे लगता है कि रेखा चार्ट बेहतर होगा। लेकिन यहां ग्राफ वास्तव में उस डिजाइन पर सुधार करता है जिसे मैंने डेमो किया था जिसमें तीर बार geom से कम कवर करता था। यदि कोई महीने की तुलना में अधिक सटीक महीने चाहता था तो इस दृष्टिकोण के कुछ लाभ हो सकते हैं। मुझे कोई अनुभवजन्य अध्ययन नहीं पता है जिसने इस तरह के कार्य के लिए इस तरह के ग्राफ की धारणा की तुलना की है, लेकिन मैं देख सकता हूं कि इसमें कुल लाभ के बारे में जानकारी खोए बिना महीने की विविधता और परिमाण की पहचान करने की अनुमति देने में योग्यता हो सकती है। –

+0

कोई भी रंगीन तीर पर ध्यान केंद्रित कर सकता है या प्रतिस्पर्धात्मक उत्तेजनात्मक गुणों से बहुत विचलित होने के बिना अंतर रेखा पर सलाखों या ध्यान पर ध्यान दे सकता है (इनके लिए तकनीकी नाम नहीं जानता है, लेकिन वर्ष 2 क्षैतिज रेखाएं)। ग्राफ गुणवत्ता और डिजाइन उद्देश्य के उद्देश्य के बारे में है। मैं देख सकता हूं कि इस ग्राफ प्रकार में सही परिस्थितियों में योग्यता हो सकती है। दृष्टिकोण के लिए धन्यवाद। –

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