2013-03-12 5 views
23

बुनाई में, कोई भी इसे चंक विकल्पों में निर्दिष्ट करके साजिश का आकार निर्दिष्ट कर सकता है।knitr प्लॉट्स के लिए गतिशील ऊंचाई और चौड़ाई

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

```{r, fig.width=9,fig.height=3} 
plot(x) 
``` 

मैं चाहते हैं गतिशील x में आंकड़ा ऊंचाई चर के आधार पर चौड़ाई समायोजित करने में सक्षम हो। मान लें कि एक्स एक data.frame है करते हैं:

x <- data.frame(x=factor(letters[1:3]),y=rnorm(3)) 

उदाहरण के लिये कहते हैं कि मैं length(unique(x$x))

उत्तर

15

उदाहरण के लिए आप एक और हिस्सा में चौड़ाई परिभाषित कर सकते हैं के बराबर होना fig.height समायोजित करना चाहते हैं देता है, तो इस समस्या का उपयोग यह

```{r,echo=FALSE} 
x <- data.frame(x=factor(letters[1:3]),y=rnorm(3)) 
len = length(unique(x$x)) 
``` 


```{r fig.width=len, fig.height=6} 

plot(cars) 
``` 
+0

मुझे यह जवाब पसंद है, मैं बस चाहता हूं कि वर्तमान खंड में knitr को देखने के लिए कुछ ऐसा था (इसे पहले परिभाषित करने के बजाय)। मैं "पहले" हुक के साथ खेल रहा हूं, यह देखने की कोशिश कर रहा हूं कि मैं इससे कुछ प्राप्त कर सकता हूं या नहीं। अब तक कोई पासा नहीं है। –

+4

@BrandonBertelsen मुझे लगता है कि समझते हैं, लेकिन 'knitr' हिस्सा का मूल्यांकन है, तो आप के लिए एक बाद में वस्तुओं का उपयोग करने के पिछले हिस्सा में कोड का मूल्यांकन करने के लिए है (एक उचित आकार के साथ) ग्राफिकल उपकरण को खोलने के लिए है * पहले * हिस्सा। –

+0

@BrandonBertelsen मैं Yihui की तुलना में बेहतर नहीं कह सकता। सिर्फ मेरे लिए यह आपके सभी पैरामीटर को एक चंक में सेट करने की पठनीयता के लिए बेहतर है, उदाहरण के लिए init.chunck। – agstudy

0

एक वैकल्पिक हल, खासकर यदि आप एक पाश के भीतर आंकड़ा पैरामीटर बदलना चाहते हैं,

  1. एक और हिस्सा एक समारोह जो पाश
  2. कार्यान्वित अलग से निम्नलिखित हिस्सा

    ```{r, echo=FALSE} 
    testFunction <- function (parameter) { 
        x <- data.frame(x=c(1:parameter), y=rnorm(parameter)) 
        g1 <- ggplot(data=x, aes(x=x, y=y)) + geom_point() 
        print(g1) 
    } 
    ``` 
    
    
    ```{r fig.width=10, fig.height=6} 
    testFunction(10) 
    ``` 
    
    
    ```{r fig.width=5, fig.height=4} 
    testFunction(4) 
    ``` 
    
1

मैं सिर्फ इस बारे में एक महान ब्लॉग पोस्ट पाया में आंकड़ा विवरण परिभाषित परिभाषित करें,।

और पढ़ें at Michael J Williams' blog - मैंने बेकार ढंग से कोड को पायलट किया है, और वहां अधिक जानकारी है। परिणाम = "asis" में खंड विकल्पों को सेट करना याद रखें।

कहें कि आप लूप का उपयोग करके भूखंडों का एक गुच्छा आउटपुट करना चाहते हैं लेकिन आप चाहते हैं कि प्रत्येक के पास अलग-अलग आकार हों। (फिर से , मैं सिर्फ कॉपी-पेस्ट कर रहा हूँ यहाँ) निम्नलिखित समारोह को परिभाषित करें:

subchunkify <- function(g, fig_height=7, fig_width=5) { 
    g_deparsed <- paste0(deparse(
    function() {g} 
), collapse = '') 

    sub_chunk <- paste0(" 
    `","``{r sub_chunk_", floor(runif(1) * 10000), ", fig.height=", 
    fig_height, ", fig.width=", fig_width, ", echo=FALSE}", 
    "\n(", 
    g_deparsed 
    , ")()", 
    "\n`","`` 
    ") 

    cat(knitr::knit(text = knitr::knit_expand(text = sub_chunk), quiet = TRUE)) 
} 

और इस तरह फ़ंक्शन का उपयोग करें, अपने खुद के आंकड़ा आकार को परिभाषित:

```{r echo=FALSE, results='asis'} 
g <- ggplot(economics, aes(date, unemploy)) + 
    geom_line() 
subchunkify(g, 10, 3) 
subchunkify(g, 7, 7) 
``` 

या डेटा जाने आकार को परिभाषित:

```{r echo=FALSE, results='asis'} 
g <- ggplot(economics, aes(date, unemploy)) + 
    geom_line() 
for (i in seq(2, 5)) { 
    subchunkify(g, i/2, i) 
} 
``` 

पोस्ट में माइकल ने चेतावनी दी है कि आप सावधान रहना चाहिए:

चूंकि हम परिणाम = 'एएसआईएस' का उपयोग कर रहे हैं, अगर हम टेक्स्ट या हेडिंग्स या खंड से कुछ और आउटपुट करना चाहते हैं, तो हमें कच्चे HTML का उपयोग करना चाहिए, मार्कडाउन नहीं, और हमें यह करने के लिए बिल्ली() का उपयोग करना होगा, प्रिंट नहीं()।

g <- ggplot(economics, aes(date, unemploy)) + 
    geom_line() 

cat('<h2>A Small Square Plot</h2>') 
subchunkify(g, 3, 3) 

फिर से, नहीं मेरा काम ... सिर पर पर कि lovely blog post को अधिक जानकारी के लिए: उदाहरण के लिए। उम्मीद है इससे आपका काम बनेगा।

+0

मैं इतना है कि यह 'पढ़ता बिल्ली' subchunkify' समारोह की अंतिम पंक्ति को संशोधित करने की जरूरत (trimws (knitr :: बुनना (पाठ = knitr :: knit_expand (पाठ = sub_chunk), शांत = TRUE))) '। तब सब कुछ अच्छा काम किया। –

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