मैं आर के साथ कुछ त्वरित और आसान sparklines
के लिए इस फ़ंक्शन का उपयोग कर रहा हूं लेकिन मैं वाई-अक्ष टिक लेबल के बदसूरत ओवरलैप से बचने के लिए फ़ॉन्ट आकार को बदलने का तरीका प्रतीत नहीं कर सकता। यहाँ मेरी कोड (एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण के लिए नीचे देखें) है:आर येलटूलकिट: स्पार्कलाइन पर टिक लेबल के फ़ॉन्ट आकार को कैसे बदलें?
sparklines(gamma.df, sub=c(1:23),outer.margin = unit(c(2, 2, 2, 2), "cm"))
और जिसके परिणामस्वरूप साजिश:
मैं पूरी तरह से
साथ y- अक्ष को दबाने में सक्षम होने लगते हैंsparklines(gamma.df, sub=c(1:23),yaxis=FALSE,outer.margin = unit(c(2, 2, 2, 2), "cm"))
लेकिन जो मैं वास्तव में चाहता हूं वह सिर्फ संख्या को छोटा कर रहा है टिक अंक पर बियर (और लाइन के नीचे ग्रे भरें जोड़ें, लेकिन ऐसा लगता है कि मुझे स्क्रीन पर बहुभुज आकर्षित करना होगा जो शायद एक अलग प्रश्न के लायक होने के लिए पर्याप्त परेशानी है ... और एक अलग पैकेज)।
documentation सुझाव देता है कि gpar प्रासंगिक हो सकता है: 'उन सभी मामलों में जहां ग्राफिक्स पैरामीटर की एक सूची की आवश्यकता है, वैध पैरामीटर नाम उचित कॉल में गिपर को पारित होने पर मान्य होंगे।' लेकिन मुझे इसके बारे में समझने में थोड़ी मदद की ज़रूरत है क्योंकि मेरे किसी भी प्रयास को कहीं भी नहीं मिल रहा है (cex.axis और axis() के लिए ditto। आर के grid
ग्राफिक्स पर कोई विशेषज्ञ वहां से बाहर हैं? एक अच्छी तरह से प्रलेखित पूरी तरह से अलग दृष्टिकोण (ggplot2?) के लिए लिंक जो बेहतर गुणवत्ता वाले स्पार्कलाइन-शैली आउटपुट का स्वागत करते हैं।
यहां कुछ उदाहरण डेटा और कोड है कि मेरी समस्या प्रतिकृति है:
x <- data.frame(V = rnorm(1000), W = rnorm(1000), X = rnorm(1000), Y = rnorm(1000), Z = rnorm(10))
sparklines(x,outer.margin = unit(c(2, 2, 2, 2), "cm"))
और यहाँ y- अक्ष tickmarks पर बदसूरत अतिव्यापी संख्या के साथ जिसके परिणामस्वरूप उदाहरण डेटा की साजिश है:
अद्यतन: का उपयोग सहायक plot
@ गीक-ऑन-एसिड से कोड और टी से कुछ कोड यूएफटी मंच (नीचे देखें) मैं एक वैकल्पिक स्पार्कलाइन विधि के साथ आया हूं जो YaleToolkit
पैकेज का उपयोग नहीं करता है और ठीक दिखता है ... यहां एक पुन: उत्पन्न उदाहरण है (वास्तव में केवल दो पंक्तियां, लेकिन मेरी शिक्षा के लिए यहां टिप्पणी की गई):
x <- data.frame(V = rnorm(1000), W = rnorm(1000), X = rnorm(1000), Y = rnorm(1000),
Z = rnorm(1000)) # get a bit of data
par(mfrow=c(ncol(x),1), #sets number of rows in space to number of cols in data frame x
mar=c(1,0,0,0), #sets margin size for the figures
oma=c(4,5,4,4)) #sets outer margin
for (i in 1:ncol(x)){ # setup for statement to loops over all elements in a list or vector
plot(x[,i], #use col data, not rows from data frame x
col="grey",lwd=0.5, #make the line grey and thin
axes=F,ylab="",xlab="",main="",type="l"); #suppress axes lines, set as line plot
axis(2,yaxp=c(min(x[,i]),max(x[,i]),2), # y-axis: only show tickmarks for max and min values of col
cex.axis=1.1,las=1, # shrink fontsize slightly, make text horizontal for easy reading
at=c(round(min(x[,i]),3),round(max(x[,i]),3))); #specify where tickmark numbers go and round them to keep it tidy
axis(2,yaxp=c(min(x[,i]),max(x[,i]),2),col="white",tcl=0,labels=FALSE) #y-axis: put a 2nd white axis line over the 1st y-axis to make it invisible
ymin<-min(x[,i]); tmin<-which.min(x[,i]);ymax<-max(x[,i]);tmax<-which.max(x[,i]); # see the code from Jason below for what these do
points(x=c(tmin,tmax),y=c(ymin,ymax),pch=19,col=c("red","blue"),cex=1) # add coloured points at max and min
}
axis(1,pos=c(-5)) # places horizontal axis at the bottom of it all.
परिणामस्वरूप छवि है, जो मूल रूप से मेरी समस्या का समाधान है। वाई-अक्ष टिक अंक डेटा के केवल अधिकतम और न्यूनतम मान दिखाकर और लंबवत रेखा नहीं दिखाकर सुरुचिपूर्ण होने का प्रयास करते हैं। टिप के लिए @ geek-on-acid पर फिर से धन्यवाद, मैं उन सभी के नीचे एक एक्स-अक्ष कैसे प्राप्त करूं।
अंत में, संपूर्णता के लिए मैं जेसन DIETERLE कि मैं Tufte forum पर पाया द्वारा Tufte's style के करीब स्पार्कलाइन के लिए कुछ कोड शामिल हैं। वे मेरी तुलना में बहुत अच्छे लगते हैं, लेकिन कोड एक समय में केवल एक साजिश करता है।यहाँ मूल पोस्ट है:
#Here is a simple R implementation of sparklines. Running sparkline() will generate a random sparkline; running sparkline(yourdata) will generate a sparkline using the data in yourdata. As an example, here is Google's stock price for the last year.
#R sparklines
sparkline<-function(ydata=rnorm(100,500,50),width=1.5,height=0.5,sigfigs=4) {
# ydata = vector of data to be plotted
# width = width of sparlkline in inches, including text
# height = height of sparkline in inches
# sigfigs = number of significant figures to round min, max, and last values to
temppar<-par(no.readonly = TRUE) # store default graphics parameters
par(mai=c(0.10,0.05,0.10,0.05),fin=c(width,height)) # adjust graphics parameters for sparklines
len<-length(ydata) # determine the length of the data set
ymin<-min(ydata) # determine the minimum
tmin<-which.min(ydata) # and its index
ymax<-max(ydata) # determine the maximum
tmax<-which.max(ydata) # and its index
yfin<-signif(ydata[len],sigfigs) #determine most recent data point
plotrange=c(ymin-0.3*(ymax-ymin),ymax+0.3*(ymax-ymin)) # define plot range to leave enough room for min and max circles and text
plot(x=1:len,y=ydata,type="l",xlim=c(1,len*1.5),ylim=plotrange,col="gray",lwd=0.5,ann=FALSE,axes=FALSE) # plot sparkline
points(x=c(tmin,tmax),y=c(ymin,ymax),pch=19,col=c("red","blue"),cex=0.5) # plot min and max points
text(x=len,y=ymin,labels=signif(ymin,sigfigs),cex=0.5,pos=4,col="red") # show minimum value
text(x=len,y=ymax,labels=signif(ymax,sigfigs),cex=0.5,pos=4,col="blue") # show maximum value
text(x=len,y=(ymin+ymax)/2,labels=yfin,cex=0.5,pos=4) # show most recent value
par(temppar) # restore graphics defaults
}
#-- Jason Dieterle (email), January 28, 2008
और यहाँ उसके उत्पादन की तरह (एक छोटे से बढ़े हुए) दिखता है:
YaleToolkit पैकेज के अलावा, वहाँ है sparkTable package जो मैं कम से सीखा stats.stackexchange लेकिन कोशिश नहीं की है। आर-फोर्ज में स्पार्कलाइन बनाने के लिए another package के लिए एक प्रविष्टि है, लेकिन ऐसा लगता है कि यह सक्रिय या उपयोगी नहीं है।
बहुत अच्छा तोड़ मरोड़ @Ben है कि - अच्छी तरह से किया हुआ। आपको शायद इसे संपादित करने के बजाय अलग जवाब के रूप में पोस्ट करना चाहिए था। नीचे एक एक्स अक्ष जोड़ने के लिए बस 'लूप' के तुरंत बाद 'अक्ष (1, pos = c (-4))' जोड़ें। –
@ गीक ऑन एसिड, धन्यवाद फिर से! मैंने आपके मूल उत्तर में उस अंतिम पंक्ति को याद किया। मैंने इसे अभी जोड़ा है। – Ben