2012-11-22 20 views
5

मेरे पास आर में एक किंवदंती में एक लाइनब्रेक है और मेरी समस्या यह है कि ग्राफिक अपेक्षा की अपेक्षा नहीं करता है। मेरे कम से कम उदाहरण इस प्रकार है:आर प्लॉट किंवदंती व्यवहार में लाइनब्रेक

plot(1) 
legendLabel<-c("t\nu ","tu","wh","trr\nni") 
legend("top",legend=legendLabel,horiz=TRUE,fill=c("red","blue","gray","black")) 

मैं उम्मीद होती है कि कथा के ऊपरी और निचले मार्जिन बराबर है, लेकिन यह मामला नहीं है। enter image description here

जैसा कि आप संलग्न छवि में देख सकते हैं, निचला मार्जिन ऊपरी तब छोटा है।

क्या किसी को यह पता है कि इसे कैसे ठीक किया जाए या कोई मुझे बता सके कि समस्या क्या है?

धन्यवाद।

+1

मैं भी हार मानता हूं। आप 'bty = "n" 'के साथ बॉक्स को हटाना चाहते हैं और इसके बाद' बहुभुज 'जोड़ सकते हैं। –

उत्तर

2

धन्यवाद लिए @ 'मार्क बॉक्स में' मैं एक अच्छा काम कर समाधान मिल गया। एच के रूप में बॉक्स अक्षम ई bty="n" साथ बताया और फिर

ld<-legend("top",legend=legendLabel, cex=0.65, fill=colorNames, horiz=TRUE,bty="n") 
    height<-(ld$rect$top-ld$text$y[1])*2 
    xs <- c(ld$rect$left, ld$rect$left, ld$rect$left+ld$rect$w, ld$rect$left+ld$rect$w) 
    ys <- c(ld$rect$top, ld$rect$top-height, ld$rect$top-height, ld$rect$top) 
    polygon(x = xs , y = ys) 

तो मैं पहली बार शीर्ष कोने और डाटापॉइंट और समापन इस जानकारी एक बहुभुज के साथ आकर्षित के बीच की दूरी की गणना। काफी सामान्य काम करता है जैसा मैंने देखा है।

धन्यवाद।

4

ठीक है, मेरा मानना ​​है कि मेरे पास आपके लिए समाधान है। मैंने ld नामक ऑब्जेक्ट में किंवदंती स्थिति की जानकारी सहेजी और फिर इन निर्देशांकों के आधार पर polygon बनाएं। यह समझने में थोड़ा मुश्किल है, लेकिन मैं मूल रूप से कुछ बिंदुओं की लंबाई से बहुभुज का विस्तार कर रहा हूं। ऐसा करने के लिए, मुझे सबसे पहले par()$cin के साथ इंच आकार में चरित्र आकार प्राप्त करना था और इन आयामों को पॉइंटाइज़ को घुमाएं (72 से विभाजित करें और par()$ps से गुणा करें। फिर, इसे par()$usr के साथ स्केल करके साजिश की इकाइयों में परिवर्तित करें इकाइयों में चरित्र चौड़ाई (मुझे लगता है कि यह सही है - किसी भी मामले में यह काम करता है!)। मैंने इन इकाइयों में से 3 को ld निर्देशांक के बाईं ओर जोड़ा, 2 दाएं, 1 ऊपर और 1 नीचे। परिणाम और कोड यहां दिया गया है:

enter image description here

plot(1) 
legendLabel<-c("t\nu ","tu","wh","trr\nni") 
ld <- legend("top",legend=legendLabel,horiz=TRUE,fill=c("red","blue","gray","black"), bty="n") 

CIN <- par()$cin 
PS <- par()$ps 
USR <- par()$usr 
CIN.USR <- c((CIN[1]/72*PS)/(USR[2]-USR[1]), (CIN[2]/72*PS)/(USR[4]-USR[3])) 

xs <- c(ld$text$x[1], ld$text$x[1], ld$text$x[length(ld$text$x)], ld$text$x[length(ld$text$x)]) 
ys <- c(ld$text$y[1], ld$text$y[1], ld$text$y[length(ld$text$x)], ld$text$y[length(ld$text$x)]) 

polygon(
x = xs + c(-3*CIN.USR[1], -3*CIN.USR[1], 2*CIN.USR[1], 2*CIN.USR[1]), 
y = ys+c(-1*CIN.USR[2], 1*CIN.USR[2], 1*CIN.USR[2], -1*CIN.USR[2]) 
) 
+0

आपके उत्तर के लिए धन्यवाद, आपके आधार पर मुझे मेरे लिए एक समाधान समाधान मिला। आपके साथ समस्या यह थी कि मैं 'बारप्लॉट (मैट्रिक्स (डेटा, एनआर = 6), names.arg = name, = FALSE, xlim = range (0,100), ylim = range (0,12), horiz = TRUE के बगल में उपयोग करता हूं) 'और आपका कोड केवल एक ठोस रेखा खींचता है। – steffenmauch