आर

2012-02-16 7 views
7

में एक मल्टी-लाइन टेक्स्ट बॉक्स प्लॉट करें, मैं आर का उपयोग करके एक बहु-साजिश लेआउट चित्रण बना रहा हूं, और यह प्लॉट्स में से एक में एक बहु-पंक्ति टेक्स्ट बॉक्स बनाने में सक्षम होना सुविधाजनक होगा।आर

मैं छवियों, टेक्स्ट और आर कोड को गठबंधन करने के लिए स्वीवे का उपयोग करने से परिचित हूं, हालांकि विभिन्न कारणों से मुझे आर में उत्पादित एक पृष्ठ प्लॉट होने की आवश्यकता है। इस प्रकार लेटेक्स चिह्न का उपयोग करने के बजाय टेक्स्ट बॉक्स प्लॉट करने की आवश्यकता -अप।

क्या मौजूदा पैकेज में कोई फ़ंक्शन है जो यह कर सकता है? यह विफल हो रहा है, क्या कोई इसे संभालने के लिए एक सरल दृष्टिकोण सुझा सकता है?

इस स्थिति पर विचार करें:

## Specify the dimensions of the plot 
## that we require 
win.graph(8,4) 

## Two panel layout 
layout(matrix(1:2, 1, 2)) 
par(mar=c(0,0,0,0)) 

## Left panel shows picture 
plot(rep(1:10, each=10), rep(1:10, times=10), 
col=rainbow(100), pch=20, cex=5) 


## Right panel discusses the data 
plot.default(c(0,100), c(0,100), type="n", axes=FALSE, 
ylab="", xlab="") 

text(20, 30, "It would be great if this text box\n 
could handle word wrap, and ideally given the size\n 
of the font (i.e. the cex parameter) and the area\n 
of the plot it should be able to do this dynamically,\n 
without requiring the newline characters I am\n 
manually inserting. Ability to control the line\n 
height would also be nice.\n 
Am I dreaming?", cex=0.75, adj=c(0,0)) 

Output from example

+4

मुझे पता है कि आप 'पेस्ट (स्ट्रॉप (लांगस्ट्रिंग, चौड़ाई = WIDTH), पतन =' \ n ') के माध्यम से रैपिंग कर सकते हैं, लेकिन मुझे यकीन नहीं है कि चौड़ाई (वर्णों में) कैसे काम करना है लपेटने के लिए चौड़ाई की गणना करने के लिए डिफ़ॉल्ट रूप से दूसरी साजिश। –

+0

@ गणितीय.coffee यह सबसे आसान समाधान हो सकता है। सादगी के लिए शब्द रैप पॉइंट की गतिशील गणना में व्यापार (यानी दृश्य दृश्य के आधार पर मैन्युअल रूप से 'WIDTH' चुनें)। – digitalmaps

उत्तर

6

प्रयास करें आर ग्राफिक्स पुस्तक

text = paste(capture.output(licence()),collapse=" ") 
library(RGraphics) 
library(gridExtra) 

grid.arrange(rectGrob(), splitTextGrob(text), ncol=2) 

d <- expand.grid(seq(0.1, 0.9, length=10), seq(0.1, 0.9, length=10)) 
grid.arrange(pointsGrob(d[, 2], d[, 1], pch=21, 
gp=gpar(fill=rainbow(100))), splitTextGrob(text), ncol=2) 

enter image description here

से splitTextGrob() (विंडो का आकार बदलने की कोशिश)

+०१२३५१६४१०

यह दृष्टिकोण ग्रिड ग्राफिक्स के आधार पर किया जा रहा है, तो आप या तो

  • उपयोग जाली/ggplot2/भूखंडों

  • के लिए ग्रिड gridBase पैकेज का उपयोग कर सकते ग्रिड व्यूपोर्ट के भीतर आधार ग्राफिक्स जगह

+0

धन्यवाद यह सहायक है। मैंने 'बेस' ग्राफिक्स का उपयोग करने के लिए 'ग्रिडबेस' की जांच की और स्पष्ट रूप से 'grid.arrange' का उपयोग करना आवश्यक है और फिर मूल ग्राफिक्स जोड़ें। (मुझे 'आधार' को शामिल करने की आवश्यकता है क्योंकि मैं 'sp' और 'raster' पैकेज से ऑब्जेक्ट्स प्लॉट कर रहा हूं)। पैकेज से जुड़े विग्नेट इंगित करता है कि यह संभव है। मैं एक करीबी पढ़ाऊंगा। – digitalmaps

+0

'grid.arrange() 'सिर्फ एक शॉर्टकट था जिसे मैंने चित्रण के लिए उपयोग किया था; आप शायद 'ग्रिडबेस' के साथ वास्तविक एप्लिकेशन के लिए 'व्यूपोर्ट()' का उपयोग करना चाहेंगे। – baptiste

+0

इसे स्वीकृत उत्तर के रूप में चुनना क्योंकि यह समस्या को पूरी तरह से और प्रभावी ढंग से हल करता है। केवल नकारात्मक बात यह है कि 'ग्रिड' ग्राफिक्स सिस्टम से अपरिचित लोगों के लिए, सीखने की वक्र का थोड़ा सा हिस्सा है। – digitalmaps

2

कुछ अन्य विकल्प देखने के लिए (आप इन कार्यों में से किसी एक में कोड को अनुकूलित करना चाहते हैं) में textplot फ़ंक्शन शामिल करें पैकेज और addtable2plotplotrix पैकेज में।