Ggplot2 में अक्ष और क्षेत्र-भूखंड के बीच स्थान कैसे निकालें?


113

मेरे पास निम्नलिखित डेटाफ़्रेम हैं:

uniq <- structure(list(year = c(1986L, 1987L, 1991L, 1992L, 1993L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 1986L, 1987L, 1991L, 1992L, 1993L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 1986L, 1987L, 1991L, 1992L, 1993L, 1994L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L), uniq.loc = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("u.1", "u.2", "u.3"), class = "factor"), uniq.n = c(1, 1, 1, 2, 5, 4, 2, 16, 16, 10, 15, 14, 8, 12, 20, 11, 17, 30, 17, 21, 22, 19, 34, 44, 56, 11, 0, 0, 3, 3, 7, 17, 12, 21, 18, 10, 12, 9, 7, 11, 25, 14, 11, 17, 12, 24, 59, 17, 36, 50, 59, 12, 0, 0, 0, 1, 4, 6, 3, 3, 9, 3, 4, 2, 5, 2, 12, 6, 8, 8, 3, 2, 9, 5, 20, 7, 10, 8), uniq.p = c(100, 100, 25, 33.3, 31.2, 14.8, 11.8, 40, 37.2, 43.5, 48.4, 56, 40, 48, 35.1, 35.5, 47.2, 54.5, 53.1, 44.7, 24.4, 46.3, 37.8, 43.6, 44.8, 35.5, 0, 0, 75, 50, 43.8, 63, 70.6, 52.5, 41.9, 43.5, 38.7, 36, 35, 44, 43.9, 45.2, 30.6, 30.9, 37.5, 51.1, 65.6, 41.5, 40, 49.5, 47.2, 38.7, 0, 0, 0, 16.7, 25, 22.2, 17.6, 7.5, 20.9, 13, 12.9, 8, 25, 8, 21.1, 19.4, 22.2, 14.5, 9.4, 4.3, 10, 12.2, 22.2, 6.9, 8, 25.8)), .Names = c("year", "uniq.loc", "uniq.n", "uniq.p"), class = "data.frame", row.names = c(NA, -78L))

जब मैं एक क्षेत्र-भूखंड बनाता हूं:

ggplot(data = uniq) + 
  geom_area(aes(x = year, y = uniq.p, fill = uniq.loc), stat = "identity", position = "stack") +
  scale_x_continuous(limits=c(1986,2014)) +
  scale_y_continuous(limits=c(0,101)) +
  theme_bw()

मुझे यह परिणाम मिलता है:

यहां छवि विवरण दर्ज करें

हालांकि, मैं अक्ष और वास्तविक भूखंड के बीच के स्थान को हटाना चाहता हूं। जब मैं जोड़ता theme(panel.grid = element_blank(), panel.margin = unit(-0.8, "lines"))हूं मुझे निम्न त्रुटि संदेश मिलता है:

Error in theme(panel.grid = element_blank(), panel.margin = unit(-0.8,  : 
  could not find function "unit"

इस समस्या को हल करने के बारे में कोई सुझाव?


3
मैं आपको स्पष्ट रूप से के लिए ग्रिड पैकेज लोड करने के लिए की जरूरत है लगता हैunit
टायलर Rinker

@TylerRinker Thanx! मुझे अब कोई त्रुटि संदेश नहीं मिलता है। मैंने समस्या को पहले से ही दूसरे तरीके से हल किया, लेकिन यह भविष्य के लिए एक अच्छा अनुस्मारक है जब मैं मार्जिन सेट करना चाहता हूं।
जाप

3
इसे कभी-कभी एक तंग लेआउट के रूप में जाना जाता है। इसे यहां उल्लेखित करना ताकि खोज इंजन इसे उठा सकें।
बेनामी

जवाबों:


191

अद्यतन: के नवीनतम संस्करणों में आगे की संभावनाओं के लिए @ divibisan का उत्तर देखें


के ?scale_x_continuousबारे में से expandतर्क:

रेंज विस्तार स्थिरांक के वेक्टर डेटा के चारों ओर कुछ पैडिंग जोड़ते थे, यह सुनिश्चित करने के लिए कि उन्हें कुल्हाड़ियों से कुछ दूरी पर रखा गया है। चूक लगातार चर के लिए प्रत्येक पक्ष पर 5% से पैमाने का विस्तार करने के लिए हैं, और असतत चर के लिए प्रत्येक पक्ष पर 0.6 इकाइयों द्वारा।

समस्या इस प्रकार जोड़कर हल किया जाता है expand = c(0,0)करने के लिए scale_x_continuousऔर scale_y_continuous। यह panel.marginपैरामीटर को जोड़ने की आवश्यकता को भी हटा देता है ।

कोड:

ggplot(data = uniq) + 
  geom_area(aes(x = year, y = uniq.p, fill = uniq.loc), stat = "identity", position = "stack") +
  scale_x_continuous(limits = c(1986,2014), expand = c(0, 0)) +
  scale_y_continuous(limits = c(0,101), expand = c(0, 0)) +
  theme_bw() +
  theme(panel.grid = element_blank(),
        panel.border = element_blank())

परिणाम: बिना गैप वाले प्लॉट एरिया चार्ट


41

जैसा कि ggplot2 version 3एक expand_scale()फ़ंक्शन है, जो आप उस expand=तर्क को पास कर सकते हैं जो आपको स्केल के प्रत्येक पक्ष के लिए अलग-अलग विस्तारित मान निर्दिष्ट करने देता है।

के रूप में ggplot2 version 3.3.0, के expand_scale()पक्ष में पदावनत किया गया है expansionजो अन्यथा पहचान कार्य करता है।

यह आपको यह भी चुनने देता है कि क्या आप विस्तार को एक पूर्ण आकार ( add=पैरामीटर का उपयोग करना चाहते हैं) या प्लॉट के आकार का एक प्रतिशत ( mult=पैरामीटर का उपयोग करें ):

ggplot(data = uniq) + 
  geom_area(aes(x = year, y = uniq.p, fill = uniq.loc), stat = "identity", position = "stack") +
  scale_x_continuous(limits = c(1986,2014), expand = c(0, 0)) +
  scale_y_continuous(limits = c(0,101), expand = expansion(mult = c(0, .1))) +
  theme_bw()

यहां छवि विवरण दर्ज करें


त्वरित टिप्पणी: इस मामले में expand_scale()बदल गया है, expansion()लेकिन पहचान के साथ काम करता है।
मोलक्स

1
@Molx धन्यवाद, मैंने जवाब अपडेट कर दिया है!
divibisan

14

समान परिणाम उत्पन्न करने वाला एक अन्य विकल्प, coord_cartesianनिरंतर स्थिति पैमानों (x & y) के बजाय उपयोग कर रहा है :

ggplot(data = uniq) +  
  geom_area(aes(x = year, y = uniq.p, fill = uniq.loc), stat = "identity", position = "stack") +  
  coord_cartesian(xlim = c(1986,2014), ylim = c(0,101))+
  theme_bw() + theme(panel.grid=element_blank(), panel.border=element_blank())

2
अच्छा विकल्प, +1। हालाँकि, आपको अभी भी scales_x/y_continuousभागों की आवश्यकता होगी यदि आप ब्रेक को निर्दिष्ट करना चाहते हैं, आदि।
जाप

या, और भी आसान, सेट expand = FALSEमें coord_cartesianके रूप में @Marcus में सुझाव दिया इस विचाराधीन टिप्पणी
Tjebo

@TJbo आउटपुट थोड़ा अलग है, लेकिन वास्तव में यह ओपी द्वारा अपेक्षित परिणाम के करीब है। मैं इसे बाद में अपने जवाब में जोड़ दूंगा। धन्यवाद।
मप्रसंको
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.