2013-02-02 11 views
39

के साथ संकलित एक आकृति पैनल का सामान्य मुख्य शीर्षक मेरे पास par(mfrow=c(2,2)) के साथ एक साथ खींचे गए 4 प्लॉट का संकलन है। मैं 2 उपरोक्त भूखंडों के लिए एक आम शीर्षक बनाना चाहता हूं और 2 नीचे पैनलों के लिए एक सामान्य शीर्षक बनाना चाहता हूं जो 2 बाएं और दाएं भूखंडों के बीच केंद्रित हैं।पैरा (mfrow)

क्या यह संभव है?

+0

करने से उस तरह का "शीर्षक" अस्पष्ट हैं, ऐसा नहीं है? आप इसे सभी भूखंडों के शीर्ष पर क्यों नहीं चाहते हैं? – A5C1D2H2I1M1N2O1R2T1

+0

मेरा मतलब है कि 2 ऊपरी भूखंडों के लिए एक शीर्षक और 2 निचले भूखंडों के लिए एक शीर्षक है। मैंने अपने क्यू – ECII

उत्तर

34

यह चाहिए काम है, लेकिन आप line तर्क के साथ चारों ओर खेलने के लिए की आवश्यकता होगी यह सिर्फ सही पाने के लिए:

par(mfrow = c(2, 2)) 
plot(iris$Petal.Length, iris$Petal.Width) 
plot(iris$Sepal.Length, iris$Petal.Width) 
plot(iris$Sepal.Width, iris$Petal.Width) 
plot(iris$Sepal.Length, iris$Petal.Width) 
mtext("My 'Title' in a strange place", side = 3, line = -21, outer = TRUE) 

enter image description here

mtext "मार्जिन पाठ" के लिए खड़ा है। side = 3 इसे "शीर्ष" मार्जिन में रखने के लिए कहता है। line = -21 प्लेसमेंट को 21 लाइनों से ऑफ़सेट करने का कहता है। outer = TRUE कहता है कि बाहरी मार्जिन क्षेत्र का उपयोग करना ठीक है।

शीर्ष पर एक और "शीर्षक" जोड़ने के लिए, आप का उपयोग कर कहते हैं इसे जोड़ सकते हैं, mtext("My 'Title' in a strange place", side = 3, line = -2, outer = TRUE)

+1

शानदार को सही किया। धन्यवाद। मुझे नहीं पता था कि 'mtext' नकारात्मक मानों का उपयोग कर सकता है। – ECII

+0

+1 "अजीब जगह" में "मेरा" शीर्षक "के लिए +1 ... – ECII

+2

@ECII, कोई समस्या नहीं। आम तौर पर, हालांकि, मुझे लगता है कि आप 'लेआउट' का उपयोग करके इस पर पहुंचेंगे, जैसा कि @ डिडिज़िस के उत्तर में दिखाया गया है। – A5C1D2H2I1M1N2O1R2T1

31

आप समारोह layout() उपयोग कर सकते हैं और दो की साजिश रचने क्षेत्रों जो दोनों स्तंभों में होता है (दोहराई जाने वाली संख्या को देखने के लिए सेट 1 औरमें)। फिर मैंने शीर्षक सेट करने के लिए plot.new() और text() का उपयोग किया। बेहतर प्रतिनिधित्व पाने के लिए आप हाशिए और ऊंचाइयों के साथ खेल सकते हैं।

x<-1:10 
par(mar=c(2.5,2.5,1,1)) 
layout(matrix(c(1,2,3,4,1,5,3,6),ncol=2),heights=c(1,3,1,3)) 
plot.new() 
text(0.5,0.5,"First title",cex=2,font=2) 
plot(x) 
plot.new() 
text(0.5,0.5,"Second title",cex=2,font=2) 
hist(x) 
boxplot(x) 
barplot(x) 

enter image description here

+5

आपको मेरा वोट यहां मिलता है। मुझे लगता है कि 'लेआउट' निश्चित रूप से जाने का तरीका है, लेकिन 'mtext' विकल्प भी दिखाना चाहता था। – A5C1D2H2I1M1N2O1R2T1

10

ही लेकिन बोल्ड में ऊपर के रूप में ही तर्क के साथ title(...) का उपयोग किया जा सकता है:

title("My 'Title' in a strange place", side = 3, line = -21, outer = TRUE) 
6

यहाँ एक और तरीका यह करने के लिए है, this post से line2user समारोह का उपयोग कर।

par(mfrow = c(2, 2)) 
plot(runif(100)) 
plot(runif(100)) 
text(line2user(line=mean(par('mar')[c(2, 4)]), side=2), 
    line2user(line=2, side=3), 'First title', xpd=NA, cex=2, font=2) 

plot(runif(100)) 
plot(runif(100)) 
text(line2user(line=mean(par('mar')[c(2, 4)]), side=2), 
    line2user(line=2, side=3), 'Second title', xpd=NA, cex=2, font=2) 

centered_titles

यहाँ, शीर्षक के रूप में line2user(2, 3) ने संकेत दिया, 2 लाइनों साजिश के ऊपरी किनारे से अधिक स्थिति में है। हम इसे दूसरी और चौथी भूखंडों के संबंध में बाएं और दाएं मार्जिन की संयुक्त चौड़ाई के आधे से, mean(par('mar')[c(2, 4)]) के आधार पर इसे ऑफ़सेट करके केंद्रित करते हैं।


line2user एक ऑफसेट उपयोगकर्ता में एक धुरी से (लाइनों की संख्या) को व्यक्त करता है निर्देशांक, और के रूप में परिभाषित किया गया है:

line2user <- function(line, side) { 
    lh <- par('cin')[2] * par('cex') * par('lheight') 
    x_off <- diff(grconvertX(0:1, 'inches', 'user')) 
    y_off <- diff(grconvertY(0:1, 'inches', 'user')) 
    switch(side, 
     `1` = par('usr')[3] - line * y_off * lh, 
     `2` = par('usr')[1] - line * x_off * lh, 
     `3` = par('usr')[4] + line * y_off * lh, 
     `4` = par('usr')[2] + line * x_off * lh, 
     stop("side must be 1, 2, 3, or 4", call.=FALSE)) 
} 
+0

अच्छा एक @ jbaums – Skiptoniam

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