2016-01-14 8 views
12

में संयुक्त geom_vline और geom_smooth मेरे ggplot2 चार्ट में geom_smooth() और geom_vline() जोड़ते समय मुझे अपने किंवदंती में कुछ अजीब व्यवहार का सामना करना पड़ रहा है।आर - किंवदंती

library(ggplot2) 
n <- 60 

set.seed(123) 
df <- data.frame(Area = sample(c("A", "B", "C", "D"), size = n, replace = TRUE), 
      x = runif(n), 
      y = runif(n), 
      Type = sample(c("I", "II"), size = n, replace = TRUE), 
      Result = sample(c("K", "L", "M"), size = n, replace = TRUE)) 

df.breaks <- data.frame(Area = c("B", "C"), x = c(0.8, 0.3)) 

ggplot(df, aes(x = x, y = y)) + 
    geom_point(aes(colour = Result, shape = Type), size = 3) + 
    geom_smooth(aes(linetype = "Smooth"), colour = "green", se = FALSE) + 
    geom_hline(yintercept = 0.3) + 
    facet_wrap(~Area) + 
    geom_vline(data = df.breaks, aes(xintercept = x, linetype = "Break"), colour = "purple") + 
    scale_colour_manual(values = c("K" = "red", "L" = "orange", "M" = "blue")) + 
    scale_linetype_manual(name = "Lines", values = c("Break" = "dashed", "Smooth" = "solid")) 

enter image description here

आप "लाइंस" कथा देखेंगे के रूप में किया गया है दोनों ऊर्ध्वाधर और प्रत्येक आइटम में horizontall लाइनों, और पहले मामले में वहाँ डैश रेखाएं के एक जोड़े हैं: यहाँ एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण है जबकि दूसरे मामले में कुछ ठोस लाइनें। मैं अपने कोड को एक क्षैतिज हरे रंग की रेखा (1) के साथ एक किंवदंती बनाने के लिए समायोजित करने की कोशिश कर रहा हूं और इसके आगे एक कुंजी "चिकना" और (2) एक लंबवत बैंगनी दास वाली रेखा है जिसे "ब्रेक" कहा जाता है। मैं कुछ मदद की सराहना करता हूं, इससे कोई फर्क नहीं पड़ता कि मैंने कोशिश की है (linetypeaes() आदि के अंदर/बाहर, या scale_linetype_identity() का उपयोग करके, या में override.aes विकल्प) मुझे सही संयोजन नहीं मिला!

मैं समान उदाहरण के लिए खोज की है और भले ही मैं colour, fill, या shape पर एक आरोपित खड़ी रेखा के साथ अन्य पोस्ट पाया आदि, मैं इस तरह के खान के रूप में एक linetype कथा पर एक खड़ी रेखा के साथ मिल coulnd't। किसी भी मदद की सराहना की जाएगी! धन्यवाद!

+2

शायद यह मदद कर सकता है https://groups.google.com/forum/embed/#!topic/ggplot2/pv_CGdzPWnE – MLavoie

+1

केवल एक चीज है कि मैं यह पता लगाने सकता है कि यहां तक ​​कि करीब उपयोग करने के लिए 'था आया था दो अलग किंवदंतियों को बनाने के लिए 'linetype' के बजाय चिकनाई के लिए भरें। – aosmith

+0

आप दोनों के जवाब के लिए धन्यवाद। मैं @ एस्मिथ के सुझाव के साथ गया जो कि आसान है। – Constantinos

उत्तर

1

इस प्रश्न का एक संक्षिप्त जवाब है, लेकिन मैंने सोचा कि किसी और के मामले में उत्तर देने के लिए बेहतर होगा (या मेरा भविष्य स्वयं!) इसमें रुचि है।

ggplot(df, aes(x = x, y = y)) + 
    geom_point(aes(colour = Result, shape = Type), size = 3) + 
    geom_hline(yintercept = 0.3) + 
    facet_wrap(~Area) + 
    geom_vline(data = df.breaks, 
       aes(xintercept = x, linetype = "Break"), colour = "purple") + 
    scale_colour_manual(values = c("K" = "red", "L" = "orange", "M" = "blue")) + 
    scale_linetype_manual(name = "Lines", 
          values = c("Break" = "dashed", "Smooth" = "solid")) + 
    geom_smooth(aes(fill = "Smooth"), method = "loess", colour = "green", se = FALSE) + 
    scale_fill_discrete(name = "") 

अंतिम दो पंक्तियों से ऊपर मूल से निम्न पंक्ति की जगह:

@ टिप्पणी 'अनुभाग में aosmith के सुझाव और उनके प्रोत्साहन उत्तर प्रदान करने के बाद, मैं अंत में साथ साजिश के लिए कोड की जगह कोड:

geom_smooth(aes(linetype = "Smooth"), colour = "green", se = FALSE) +

परिणामस्वरूप चार्ट को अभी भी कुछ काम की ज़रूरत है, जो कि पौराणिक दूरी के साथ esepcially है, लेकिन यह मूल समस्या हल करता है।

Vertical and Horizontal Line Legend

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