2016-02-20 16 views
10

में शीर्षक के चारों ओर एक फ्रेम डालें, मेरे पास एक शीर्षक के साथ एक फ़्रेमयुक्त प्लॉट है। मैं सोच रहा था कि क्या साजिश के मुख्य (मुख्य) शीर्षक के चारों ओर एक फ्रेम लगाने का एक त्वरित और आसान तरीका है।एक सामान्य आर प्लॉट

फ्रेम में प्लॉट के चारों ओर फ्रेम के समान चौड़ाई होना चाहिए। क्या फ्रेम की ऊंचाई समायोजित करने का कोई तरीका है?

मैं सामान्य साजिश समारोह में रहना चाहता हूं।

# Some example data 
x <- rnorm(10) 
y <- rnorm(10) 

# Plot data and add title 
plot(x,y, 
    xlab = "", 
    ylab = "", 
    frame = TRUE 
    ) 
title(main = "This should be framed") 

बहुत धन्यवाद और सभी के लिए एक अच्छा सप्ताहांत!

उत्तर

12

एक संभावना rect का उपयोग करना है।

पहले "प्लॉटिंग क्षेत्र के उपयोगकर्ता निर्देशांक की चरम सीमा" प्राप्त करने के लिए par("usr") का उपयोग करें।

क्योंकि आप चाहते हैं कि "फ्रेम साजिश आसपास फ्रेम के रूप में एक ही चौड़ाई होना चाहिए", एक्स-पदों स्पष्ट हैं: xleft और xright के रूप में की पहली और दूसरी मूल्यों का उपयोग उपयोगकर्ता निर्देशांक '।

rect के नीचे और शीर्ष स्थितियों के लिए कुछ और काम की आवश्यकता है। title की वाई स्थिति "लंबवत (बाहरी) मार्जिन 3" (?title) में लंबवत होने के लिए डिफ़ॉल्ट है। इंच में मार्जिन प्राप्त करने के लिए par("mai") का उपयोग करें। मार्जिन 3 से 2 (par("mai")[3]/2) को विभाजित करके शीर्ष वाई मार्जिन के मध्य बिंदु की गणना करें। फ्रेम की ऊंचाई को उदा। 0.5, जो शीर्षक के केंद्र और आकृति क्षेत्र और साजिश क्षेत्र की सीमा के बीच क्रमशः आधे रास्ते के अनुरूप है।

इंच से उपयोगकर्ता समन्वय में कनवर्ट करने के लिए, grconvertY का उपयोग करें। यही है, हम मान को diff(grconvertY(y = 0:1, from = "inches", to = "user")) द्वारा इंच में गुणा करते हैं (उदाहरण के लिए here देखें)। यह मान तब y (coord[4]) के ऊपरी उपयोगकर्ता समन्वय में जोड़ा जाता है।

coord <- par("usr") 
y_mid <- par("mai")[3]/2 
height <- 0.5 
conv <- diff(grconvertY(y = 0:1, from = "inches", to = "user")) 

rect(xleft = coord[1], 
    xright = coord[2], 
    ybottom = coord[4] + (y_mid * (1 - height) * conv), 
    ytop = coord[4] + (y_mid * (1 + height) * conv), 
    xpd = TRUE) 

enter image description here

3

ग्रिड चित्रमय प्रणाली इकाइयों से निपटने के लिए ज्यादा बेहतर सुविधा नहीं है, इसलिए मैं gridBase पैकेज का उपयोग करने के लिए परीक्षा होगी करने के लिए एक ग्राफिकल प्रणाली "में कदम" है, जिसमें आयत का आकार और स्थिति अधिक सीधे नामित किया जा सकता है। यहाँ कि कैसी दिखाई दे सकती है:

library(grid) 
library(gridBase) 

## Standard idiom for setting your frame of reference to be that of the base R plot's frame 
lapply(baseViewports(), pushViewport) 
## Draw a rectangle centered 2 lines above frame and 1.5 lines of text in height 
grid.rect(y = unit(1,"npc") + unit(2, "lines"), 
      height = unit(1.5, "lines"), just = "center") 

enter image description here

हेनरिक के आधार आर समाधान के विपरीत, इस के लिए आप प्रत्येक भूखंड के लिए हाथ से बेला के आसपास, प्रयोग जब तक आप आयत का y- निर्देशांकों सिर्फ पाने की जरूरत नहीं होगी सही।

+0

गैर-हार्डकोड किए गए विकल्प को देखने में कितनी राहत है! +1 – Henrik

+0

@ हेनरिक धन्यवाद! 'grconvertX()' और 'grconvertY()' लगभग * आपको एक गैर-हार्डकोडेड बेस आर समाधान पर ले जा सकता है, लेकिन लंबाई की इकाई के रूप में 'लाइनों' की किसी भी समझ में उनकी कमी है (जहां तक ​​मैं देख सकता हूं) ** ग्रिड ** - दुनिया में केवल एक किनारे कदम उठाना आसान है। –

+0

@ हेनरिक नाइस ढूंढें। इसे जोड़ने के लिए संपादन के लिए धन्यवाद। –

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