2016-03-01 12 views
6

में एक पहलू ग्रिड/facet_wrap में पैनलों के रिश्तेदार अंतरिक्ष का समायोजन वहाँ एक facet_grid या facet_wrap में अलग-अलग पहलुओं के लिए y- अक्ष की ऊंचाइयों/लंबाई को बदलने के लिए कोई तरीका है?ggplot2

उदाहरण के लिए,

library(ggplot2) 
ggplot(economics_long[economics_long$variable %in% c("pop", "uempmed"),], aes(date, value)) + 
    geom_line() + 
    facet_grid(variable~., scales = "free_y") + 
    theme(strip.background = element_blank()) 

enter image description here

ऊपर साजिश में, मैं पॉप समय श्रृंखला y- अक्ष ऊंचाई/लंबाई चाहते हैं हो सकता है, कहते हैं, दो बार के रूप uempmed y- के रूप में बड़े धुरी की लंबाई (2: 1), इस तथ्य के बावजूद कि दो बार श्रृंखला में अलग-अलग वाई-अक्ष स्केल होते हैं।

https://kohske.wordpress.com/2010/12/25/adjusting-the-relative-space-of-a-facet-grid/

मैं जानता हूँ कि मैं facet_grid में तर्क space = "free" निर्दिष्ट कर सकते हैं:

क्या Kohske यहाँ ggplot2 का एक बहुत पुराने संस्करण है, जो ggplot में काम नहीं करता> = 2.0.0 में करता है, जैसा

, लेकिन मुझे नहीं लगता कि तर्क 2: 1 वाई-अक्ष अनुपात निर्धारित करने के लिए उपयोग किया जा सकता है?

मैं अलग-अलग बनाए गए ggplots (जहां मैं अलग-अलग वाई-अक्ष लंबाई के साथ 2 अलग-अलग भूखंड बना सकता हूं) को जोड़ने के लिए "ग्रिड.रेंज प्रकार" समाधान का उपयोग नहीं करना चाहता हूं, क्योंकि मैं आदर्श बनाना चाहता हूं इस एक ही facet_wrap साजिश में शाइनी के इंटरैक्टिव ggplot2 सुविधाओं के उपयोग (: http://shiny.rstudio.com/articles/selecting-rows-of-data.html जैसे एक ब्रश के साथ एक इंटरैक्टिव चमकदार पहलू उदाहरण पृष्ठ यहाँ नीचे आधा रास्ता है)।

+1

आप कभी भी अपने समस्या के लिए एक समाधान पाया था: तो हम 2null 6 ऊँचाइ (डबल कोष्ठक के उपयोग पर ध्यान दें) को बदल सकते हैं? मैं पूछ रहा हूं क्योंकि मेरे पास एक ही सवाल है। और जब आपके पास 3 ग्रिड हों तो क्या करें और आप उन्हें अनुपात (2, 1, 1) में चाहते हैं। यह grid_extra और ऊंचाइयों पैरामीटर के साथ क्या करना काफी आसान है, लेकिन वे अच्छी तरह से खड़ी – Franky

+0

दुर्भाग्य से अभी तक नहीं संरेखित नहीं करते। शायद इसके लिए एक तरीका है, विशेष रूप से पिछले वर्ष या तो ggplot2 के अपडेट के साथ, लेकिन मुझे इसके बारे में पता नहीं है। मेरा अनुमान है कि शायद इसे अभी भी ggplot2 स्रोत में कार्यान्वित करने की आवश्यकता है, जिसे मैं बिल्कुल परिचित नहीं हूं। – FXQuantTrader

उत्तर

1

कई विकल्प हैं।

facets के साथ, आप वाई-स्केल की लंबाई में समायोजित प्रत्येक पंक्ति की ऊंचाई रखने के लिए facet_grid(..., space='free_y') का उपयोग कर सकते हैं। अपने डेटा सेट में, हालांकि, निचली पंक्ति एक पंक्ति (- 320,000 0-25 बनाम 200,000) के लिए कम से कम है।

जब ggplot2 वस्तुओं साजिश रची है/मुद्रित, वे पहले gtable वस्तुओं के लिए बदल रहे हैं। p के रूप में अपने भूखंड सहेजा जा रहा है, हम ggplotGrob फोन gtable वस्तु प्राप्त करने के लिए कर सकते हैं। यह एक तरफा प्रक्रिया है; एक बार परिवर्तित हो जाने पर, आप gtable को वापस ggplot2 ऑब्जेक्ट में परिवर्तित नहीं कर सकते!

(g <- ggplotGrob(p)) 
TableGrob (12 x 8) "layout": 18 grobs 
    z   cells  name         grob 
1 0 (1-12, 1- 8) background  rect[plot.background..rect.3766] 
2 1 (6- 6, 4- 4) panel-1-1    gTree[panel-1.gTree.3696] 
3 1 (8- 8, 4- 4) panel-1-2    gTree[panel-2.gTree.3711] 
4 3 (5- 5, 4- 4) axis-t-1       zeroGrob[NULL] 
5 3 (9- 9, 4- 4) axis-b-1 absoluteGrob[GRID.absoluteGrob.3725] 
6 3 (6- 6, 3- 3) axis-l-1 absoluteGrob[GRID.absoluteGrob.3733] 
7 3 (8- 8, 3- 3) axis-l-2 absoluteGrob[GRID.absoluteGrob.3741] 
8 3 (6- 6, 6- 6) axis-r-1       zeroGrob[NULL] 
9 3 (8- 8, 6- 6) axis-r-2       zeroGrob[NULL] 
10 2 (6- 6, 5- 5) strip-r-1       gtable[strip] 
11 2 (8- 8, 5- 5) strip-r-2       gtable[strip] 
12 4 (4- 4, 4- 4)  xlab-t       zeroGrob[NULL] 
13 5 (10-10, 4- 4)  xlab-b titleGrob[axis.title.x..titleGrob.3714] 
14 6 (6- 8, 2- 2)  ylab-l titleGrob[axis.title.y..titleGrob.3717] 
15 7 (6- 8, 7- 7)  ylab-r       zeroGrob[NULL] 
16 8 (3- 3, 4- 4) subtitle zeroGrob[plot.subtitle..zeroGrob.3763] 
17 9 (2- 2, 4- 4)  title  zeroGrob[plot.title..zeroGrob.3762] 
18 10 (11-11, 4- 4) caption zeroGrob[plot.caption..zeroGrob.3764] 

सभी तत्व ग्रिड-जैसी लेआउट में स्थापित किए गए हैं। लेआउट में प्रत्येक पंक्ति की ऊंचाई g$heights द्वारा दिया जाता है:

> g$heights 
[1] 5pt     0cm     0cm     0cm     0cm     1null    5pt     1null    0.396281911581569cm 1grobheight   
[11] 0cm     5pt  

ऑफ द मैच का समन्वय 'पैनल-1-1' और इन ऊंचाइयों को 'पैनल-1-2', और आप 6 मिल जाएगा और 8 वें तत्व 1null दोनों हैं। आप उन्हें किसी भी इकाई, सेमी, पीटी, में बदल सकते हैं ... 1null बस अन्य तत्वों के बाद क्या बचा है, और उनमें से विभाजित है।

> g$heights[[6]] <- unit(2, 'null') 
> grid.draw(g) 

enter image description here

+0

धन्यवाद, मैं ggplots बनाने के लिए इस दृष्टिकोण से अवगत हूं (मैंने प्रश्न में 'grid.arrange' प्रकार के समाधान का उल्लेख किया है)। लेकिन मुझे नहीं लगता कि यह वास्तव में मेरे विशिष्ट प्रश्न का उत्तर देता है ... मैं आखिरकार facet_wrap में वाई अक्ष को समायोजित करने में सक्षम होना चाहता हूं, इसलिए मैं चमकदार के भीतर इंटरैक्टिव ggplot2 चार्ट का उपयोग कर सकता हूं ... ब्रश पॉइंट उदाहरण देखें मेरे प्रश्न में rstudio लिंक में 'facet_wrap' है। मुझे कुछ पता नहीं है जैसे 'grob's – FXQuantTrader

+0

का उपयोग करके यह भी संभव है यह स्पष्ट नहीं है कि ब्रश पॉइंट कैसे काम करता है; मेरा अनुमान है कि यह साजिश पर अलग-अलग बिंदुओं को नहीं पहचानता है, लेकिन एक्स- और वाई-निर्देशांक को कवर करता है, और दिए गए डेटा से किसी बिंदु को देता है। क्षेत्र जो क्षेत्र के भीतर आता है। ध्यान दें कि फ़ंक्शन ggplot ऑब्जेक्ट से डेटा.फ्रेम नहीं पढ़ता है, लेकिन इसे स्पष्ट रूप से दिया जाना चाहिए; इसके अतिरिक्त आपको यह निर्दिष्ट करना होगा कि कौन से पहलू उपयोग में हैं। यदि आप इन दो कार्यों को जिस तरीके से प्रयास कर रहे हैं, उसमें गठबंधन करने का प्रयास करते हैं तो आपके लिए बहुत सारे काम काट लेंगे; दो अलग आउटपुट प्लॉट गैजेट्स का उपयोग करने के बजाय इसके बजाय प्रयास करें। – MrGumble