2016-06-29 17 views
5

के साथ समय के साथ मूल्यों में अंतर दिखाएं मेरे पास दो वर्षों से पूछे गए प्रश्नों के स्कोर के साथ डेटा सेट है। प्रत्येक प्रश्न में 2015 मूल्य और 2016 मूल्य है। मैं प्रत्येक को साजिश करना चाहता हूं और फिर 2015 मूल्य और 2016 मूल्य के बीच अलग दिखाना चाहता हूं। क्या स्कोर ऊपर या नीचे चला गया या वही रहता है? मैं सोच रहा था कि परिवर्तन की दिशा दिखाने के लिए बिंदुओं (या एक तीर) के साथ अंक के जोड़ों को जोड़ने के लिए उपयोगी हो सकता है, लेकिन मुझे ऐसा करने के लिए ggplot प्राप्त करने में कठिनाई हो रही है। यहां मेरा कोड उदाहरण है:ggplot2: तीर

df <- read.table(text = "question y2015 y2016 
q1 90 50 
q2 80 60 
q3 70 90 
q4 90 60 
q5 30 20", header = TRUE) 

g1 <- ggplot(df, aes(x=question)) 
g1 <- g1 + geom_point(aes(y=y2015, color="y2015"), size=4) 
g1 <- g1 + geom_point(aes(y=y2016, color="y2016"), size=4) 
g1 

इसका विज़ुअलाइज़ करने के लिए विभिन्न दृष्टिकोण स्वागत है।

+0

मैं अभी एक जवाब ऊपर लिखने के लिए समय नहीं है, लेकिन यदि आप सवालों की एक उचित संख्या है (जैसा कि आप नीचे एक टिप्पणी में ~ उल्लेख 100) मैं 2015 स्कोर के एक scatterplot करना होगा (एक्स) बनाम 2016 स्कोर (वाई)। 45 डिग्री की रेखा में जोड़ें और लाइन के ऊपर बिंदुएं सुधार हैं, और दोनों वर्षों के बीच सहसंबंध स्पष्ट रूप से दिखाई देता है (और आउटलायर भी खड़े रहना चाहिए)। – Gregor

+0

@ स्वयं; आपके लिए दिलचस्प हो सकता है http://stackoverflow.com/questions/38109623/remove-legend-elements-of-one-specific-geom-show-legend-false-does-not-do-t/38110017#38110017 – Alex

उत्तर

2

यह अभी भी एक सा बदसूरत है और ठीक ट्यूनिंग की जरूरत है, लेकिन यह तीर मिला,)

library(ggplot2) 
library(reshape2) 
library(dplyr) 

ggplot2df <- read.table(text = "question y2015 y2016 
q1 90 50 
       q2 80 60 
       q3 70 90 
       q4 90 60 
       q5 30 20", header = TRUE) 


df <- ggplot2df %>% 
    mutate(direction = ifelse(y2016 - y2015 > 0, "Up", "Down"))%>% 
    melt(id = c("question", "direction")) 


g1 <- ggplot(df, aes(x=question, y = value, color = variable, group = question)) + 
    geom_point(size=4) + 
    geom_path(aes(color = direction), arrow=arrow()) 

enter image description here

+0

बहुत अच्छा। मुझे वास्तव में पसंद है। – oneself

1

शायद ऐसा कुछ हो सकता है? डेटा की कुछ रीशेपिंग की आवश्यकता है और बहुत उपयोगी लाइब्रेरी tidyr से फ़ंक्शन gather के साथ देखभाल की गई है।

library(tidyr) 
library(ggplot2) 

g1 <- df %>% gather(year, value, y2015:y2016) %>% 
ggplot(aes(x = year, y = value, color= question)) + 
    geom_point() + 
    geom_line(aes(group=interaction(question))) 
g1 

enter image description here

+1

यह एक बहुत अच्छा है। एक प्रश्न की पहचान करना आसान है जिसमें वृद्धि हुई थी। – bouncyball

+2

यह अच्छा है। हालांकि, वास्तविक डेटा में, मेरे पास कई और प्रश्न हैं (~ 100) और वे प्रत्येक के लिए टेक्स्ट "q1" से अधिक लंबा है। इसलिए, मुझे लगता है कि इस तरह से कल्पना करना बहुत खराब हो जाएगा। – oneself

3

मुझे लगता है कि एक "डम्बल" चार्ट काम करेगा भी। यहां मैंने आपके डेटा को लंबे समय से दोबारा बदल दिया है।

df <- read.table(text = "question y2015 y2016 
q1 90 50 
q2 80 60 
q3 70 90 
q4 90 60 
q5 30 20", header = TRUE) 

df.long <- 
    reshape(df, varying = names(df)[2:3], 
     direction = 'long', 
     #ids = 'question', 
     times = 2015:2016, 
     v.names = 'perc', 
     timevar = 'year' 
     ) 

ggplot(df.long, aes(x = perc, y = question))+ 
    geom_line(aes(group = question))+ 
    geom_point(aes(colour = factor(year)), size = 2)+ 
    theme_bw()+ 
    scale_color_brewer(palette = 'Set1', name = 'Year') 

enter image description here

3

आप पहलू सवाल से तो और पर साल डाल एक्स-अक्ष, आप रंग के साथ प्रवृत्ति दिशा को हाइलाइट कर सकते हैं और समय के पारित होने के लिए एक्स-अक्ष का उपयोग कर सकते हैं।

library(reshape2) 
library(dplyr) 
library(ggthemes) 

ggplot(df %>% melt(id.var="question") %>% 
     group_by(question) %>% 
     mutate(Direction=ifelse(diff(value)>0,"Up","Down")), 
     aes(x=gsub("y","",variable), y=value, color=Direction, group=question)) + 
    geom_point(size=2) + 
    geom_path(arrow=arrow(length=unit(0.1,"in")), show.legend=FALSE) + 
    facet_grid(. ~ question) + 
    theme_tufte() + 
    theme(strip.text.x=element_text(size=15)) + 
    guides(color=guide_legend(reverse=TRUE)) + 
    scale_y_continuous(limits=c(0,100)) + 
    labs(x="Year", y="Value") 
सौंदर्यशास्त्र के इस एन्कोडिंग के साथ

, तो आप शायद कथा की जरूरत नहीं है, और रेखा खंडों के लिए तीर जोड़ने के साथ-साथ ज़रूरत से ज़्यादा हो सकता है, लेकिन मैं उन्हें स्पष्ट करने के लिए ही रहने दिया हो।

enter image description here