आर

2013-02-13 9 views
7

में xy स्कैटर प्लॉट के साथ घड़ी में समय का प्रदर्शन मैं निम्नलिखित प्रकार की साजिश बनाना चाहता हूं। लेकिन यह नहीं पता कि कोई पैकेज पहले से मौजूद है या नहीं, क्योंकि मुझे कोई नहीं मिला। डाटा:आर

myd <- data.frame (X = 1:5, Y = c(0.8, 0.6, 0.7, 0.75, 0.1), 
    clockd = c(12.05, 12.25, 12.45, 1.30, 2.1)) 

clockd हैं समय 12.05 12 Oclock पिछले मिनट है। मैं आर

में समय दर्ज करने के लिए उपयुक्त इकाई पता नहीं है
plot (myd$X, myd$Y) 

संपादित करें: लाल और हरे रंग तीर घंटे और एक घड़ी में घड़ी हथियारों की minitue स्थिति का प्रतिनिधित्व करता है। enter image description here

+1

शायद तुम समझा सकता है क्या तीर की लंबाई का प्रतिनिधित्व माना जाता है। मैं अनुमान लगा रहा हूं कि एक्स और वाई आपकी साजिश में घड़ी की स्थिति का प्रतिनिधित्व करते हैं? – plannapus

+0

शायद आप कोड के इस टुकड़े को अनुकूलित कर सकते हैं? http://stackoverflow.com/questions/11877379/how-to-draw-clock-in-r –

+0

@plannapus X और Y फ़ील्ड में घड़ी की स्थिति है जबकि तीर घड़ी के घंटे और मिनट की बांह का प्रतिनिधित्व करता है – rdorlearn

उत्तर

6
clockplot<-function(x, y, h, m, r, border="black", col="lightblue", 
        col.hour="darkblue", col.min="red"){ 
#x and y are the coordinates of the clock 
#h and m the hour (base 12) and minutes 
# r the radius of the clock 
    t<-seq(0,2*pi,by=0.01) 
    x.c<-r*cos(t)+x 
    y.c<-r*sin(t)+y 

    t.h<-pi/2 - 2*pi*(h-m/60)/12 
    x.h<-0.5*r*cos(t.h)+x 
    y.h<-0.5*r*sin(t.h)+y 

    t.m<-pi/2 - 2*pi*m/60 
    x.m<-r*cos(t.m)+x 
    y.m<-r*sin(t.m)+y 

    polygon(x.c,y.c,col=col, border=border) 
    segments(x,y,x.h,y.h,col=col.hour) 
    segments(x,y,x.m,y.m,col=col.min) 
    } 

myd <- data.frame (X = 1:5, Y = c(0.8, 0.6, 0.7, 0.75, 0.1), 
        clockd = c(12.05, 12.25, 12.45, 1.30, 2.1)) 
myd$hour<-myd$clockd%/%1 
myd$min<-myd$clockd%%1 *100 

plot(myd$X, myd$Y, type="l", asp=1) 
apply(myd,1,function(x)clockplot(x[1],x[2],x[4],x[5], r=0.25)) 

enter image description here

4

enter image description here

अपने डेटा देते:

read.table(text = 'col1 col2 
      0012 0001245',head=T,colClasses=c('character','numeric')) 


myd <- data.frame (X = 1:5, 
        Y = c(0.8, 0.6, 0.7, 0.75, 0.1), 
        clockd = c(12.05, 12.25, 12.45, 1.30, 2.1)) 

जाली + ग्रिड का उपयोग हम somethink इस तरह कर सकते हैं:

library(lattice) 
library(grid) 
xyplot(Y~X,data=myd, 
     panel=function(x,y,...) 
     { 

     panel.fill(col='yellow') 
     panel.lines(x,y) 

     h_min <- do.call(rbind,strsplit(as.character(myd$clockd),'[.]')) 
     hours <- as.numeric(h_min[,1]) 
     minutes <- as.numeric(h_min[,2]) 
     lapply(seq_along(x), 
         function(i)drawClock(x[i],y[i],hour = hours[i], minute = minutes[i])) 


     }) 

कहाँ drawClock this से करने के लिए अपनाया और trsnformed है इस प्रश्न की आवश्यकता:

drawClock <- function(x0,y0,hour, minute) { 
    t <- seq(0, 2*pi, length=13)[-13] 
    x <- cos(t) 
    y <- sin(t) 
    # Circle with ticks 
    grid.circle(x=x0, y=y0, default="native", 
       r=unit(0.4,'in'),gp=gpar(fill='blue',alpha=0.5)) 
    #   grid.segments(x, y, x*.9, y*.9, default="native") 
    # Hour hand 
    hourAngle <- pi/2 - (hour + minute/60)/12*2*pi 
    grid.segments(x0, y0, 
       x0+.06*cos(hourAngle), y0+.06*sin(hourAngle), 
       default="native", gp=gpar(lex=4)) 
    # Minute hand 
    minuteAngle <- pi/2 - (minute)/60*2*pi 
    grid.segments(x0, y0, 
       x0+.08*cos(minuteAngle), y0+.08*sin(minuteAngle), 
       default="native", gp=gpar(lex=2))  
} 
2

उपकरण साजिश के इस प्रकार बनाने में मदद करने के लिए TeachingDemos पैकेज में my.symbols समारोह में देखो।

5

मैं TeachingDemo पैकेज से my.symbols फ़ंक्शन के साथ @GregSnow द्वारा सुझाव का उपयोग कर रहा हूं। इस तरह आप इसे कोड के एक छोटे (आईएसएच) खंड के साथ कर सकते हैं लेकिन आप ग्राफिकल पैरामीटर्स जैसे आकार और घड़ी की सर्किल भरने, तीरों के देखो, जिस तरह से आप अपनी साजिश को अनुकूलित करते हैं, आदि पर काफी बड़ा नियंत्रण कर सकते हैं। स्थान की गणना करने के लिए तीरों के मैंने @agstudy कोड को संशोधित किया ताकि यह मिनटों को सही तरीके से निकाल सके।

myd <- data.frame (X = 1:5, Y = c(0.8, 0.6, 0.7, 0.75, 0.1), 
        clockd = c(12.05, 12.25, 12.45, 1.30, 2.1)) 
hour <- round(myd$clockd)#takes hours by ignoring decimals 
minute <- 100*(myd$clockd - trunc(myd$clockd,2))#takes decimals 
#for getting the angle I'm subtracting from pi/2 
#thats because pi/2 orients the arrow into 0 degree position, pointing up 
hourAngle <- pi/2 - (hour/12*2*pi) 
minuteAngle <- pi/2 - (minute/60*2*pi) 
#now all the plotting 
plot(myd$X, myd$Y, type="l", xaxt="n", xlab="", ylab="", 
    xlim=c(0.5,5.5), ylim=c(0,1), col="gray")#standard plot, no x axis 
axis(1, at=myd$X, labels=myd$X)#custom x-axis 
require(TeachingDemo) 
my.symbols(myd$X, myd$Y, ms.arrows, angle=hourAngle, add=T, 
      col="blue", symb.plots=TRUE, adj=0) 
my.symbols(myd$X, myd$Y, ms.arrows, angle=minuteAngle, add=T, 
      col="red", symb.plots=TRUE, adj=0) 
my.symbols(myd$X, myd$Y, ms.polygon, n=250, add=T, 
      r=1.1, col="gray") 

enter image description here