2012-10-15 14 views
9

पर अलग-अलग अक्ष टिक्स और अक्ष लाइनों को नियंत्रित करना अक्ष के स्केल टिक टिक रखते हुए, xyplot के आस-पास के बॉक्स को हटाने के बारे में मैं कैसे जा सकता हूं? एडवर्ड टुफटे के न्यूनतम डेटा ग्राफ़िक सौंदर्यशास्त्र की भावना में, ये धुरी रेखाएं "गैर-डेटा स्याही" हैं, और (मिटाई जानी चाहिए) "मिटा दी जा सकती हैं।"आर जाली xyplot

library(lattice) 
my.df <- data.frame(x=-10:10) 
my.df$y <- my.df$x^2 
xyplot(y~x,data=my.df) 

standard xyplot output

ऐसा लगता है कि ट्रेल्लिस प्रदर्शन मानकों (जैसे axis.line$col) पर नियंत्रण दोनों अक्ष लाइनों और अक्ष एक साथ टिक्स:

xyplot(y~x,data=my.df, 
     par.settings=list(axis.line=list(col="transparent"))) 

with axis.line$col="transparent"

... है जो वांछित परिणाम नहीं, इसलिए ऐसा नहीं लगता कि बॉक्स छोड़ते समय लाइनों को बंद करने का एक आसान तरीका है।

सबसे अच्छा मैं के साथ आने कर लिया है एक जानवर बल हैक, जहाँ मैं panel.segments का उपयोग कर हाथ से टिक के निशान का निर्माण होता है:

at.x=pretty(c(-10,10)) 
at.y=pretty(c(0,100)) 
xyplot(y~x,data=my.df, 
     par.settings=list(axis.line=list(col="transparent")), 
     scales=list(x=list(at=at.x,labels=at.x), 
     y=list(at=at.y,labels=at.y)), 
     panel=function(...){ 
      panel.xyplot(...) 
      panel.segments(x0=at.x,x1=at.x,y0=-4,y1=-2) 
      panel.segments(x0=-11.5,x1=-11,y0=at.y,y1=at.y) 
     } 
     ) 

hand-made tick marks with panel.segments

इस के करीब है वांछित परिणाम, लेकिन टिक अंक उचित लंबाई होने और डेटा बिंदुओं से "अच्छी" दूरी को ऑफ़सेट करने के लिए आवश्यक कुछ झुकाव है। ये मान एक ग्राफिक से अगले तक अनुवाद नहीं करेंगे। इसके अलावा, ध्यान दें कि अक्ष लेबल अब टिक अंकों से बहुत दूर हैं। मुझे यकीन है कि उस पैडिंग को कम करने का एक तरीका है, लेकिन यह केवल कोड को भी कम और पोर्टेबल बना देगा।

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

उत्तर

10

यह अभी भी थोड़ा हैकी है, लेकिन कम से कम आपको हाथ से कोई चित्र नहीं करना है।

संपादित (हटाया ट्रेल्लिस सेटिंग्स की अनावश्यक बदलते)

xyplot(y~x,data=my.df, par.settings = list(axis.line = list(col = "transparent")), 
    # Pass custom axis function to argument 'axis' 
    axis = function(side, line.col = "black", ...) { 
    # Only draw axes on the left and bottom 
    if(side %in% c("left","bottom")) { 
     # Call default axis drawing function 
     axis.default(side = side, line.col = "black", ...) 
    } 
    } 
) 
: यह par.settings का एक संयोजन और एक कस्टम axis समारोह है कि एक तर्क line.col लेता है और अस्थायी रूप से trellis.par.set के लिए एक कॉल द्वारा अक्ष रेखा का रंग बदल जाता का उपयोग करता है

फिलहाल, मैं चिल्लाता हूं कि line.col = "black" को कस्टम अक्ष फ़ंक्शन के तर्कों में जादू की आवश्यकता क्यों है। मेरा अनुमान है कि इसे अंडाकारों (...) के साथ तर्क के साथ करना है। शायद मैं कल बुद्धिमान रहूंगा और सही कारण ढूंढूंगा।

enter image description here

+0

यह बहुत अच्छा लग रहा है। क्या आप धुरी फ़ंक्शन की प्रत्येक पंक्ति क्या करते हैं और आप इसे क्यों कर रहे हैं इसके बारे में एक छोटी टिप्पणी प्रदान करना चाहते हैं?मुझे निम्न-स्तरीय धुरी फ़ंक्शंस पर सहायता प्रलेखन मिल रहा है (जैसे 'axis.default' बहुत प्रबुद्ध नहीं है। – mac

+0

@mac, बाहर निकलता है ट्रेलिस विकल्पों में कुछ अनावश्यक परिवर्तन होता है, और असली चाल लगता है कस्टम धुरी फ़ंक्शन को औपचारिक तर्क 'line.col' प्रदान करें। – BenBarnes

+1

नाइस। FWIW, 'line.col =" black "' की आवश्यकता है क्योंकि डिफ़ॉल्ट रूप से' panel.axis() '' line.xis() 'से अपना लाइन रंग लेता है। प्राप्त करें ("axis.line") ', जिसे आपने पहले पारदर्शी "' –

-1

करने के लिए सबसे आसान काम कस्टम धुरी समारोह (अक्ष) का उपयोग करने के लिए है:

यह परिणाम है। बस lwd (लाइन चौड़ाई) को शून्य पर सेट करें और कुछ और निशान (lwd.ticks) पर टिकटें। इसने एक जादू की तरह काम किया!

plot(NA,NA,type="n",xaxt="n", lwd=linewidth, xlim=c(1,24), xlab="", ylab="",ylim=c(-300,500)) 
axis(side = 4, tck = .05, **lwd=0, lwd.ticks=1**, line = 0, labels = NA, col= cols_border[1], col.axis = cols_black) 
axis(side = 4, lwd = 0, line = -4.5, las = 1, cex.axis=axis_fontsize, col= cols_border[1], col.axis = cols_black) 
mtext("Light deviations (lum/sec)",side=4, padj=-2.5, cex=title_fontsize, col="black") 
+0

पर सेट किया है, यह आधार ग्राफिक्स का उपयोग करता है, जबकि ओपी 'जाली' पैकेज का उपयोग कर रहा है। – BenBarnes

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