2013-03-29 17 views
26

Sto lavorando in una grande fattoria come statistica e il mio maestro mi ha chiesto di disegnare qualcosa per ricordargli la sua infanzia. Non è stato facile per me farlo, perché c'era una sola restrizione: fare tutto usando solo R. Ecco come ho fatto. Potresti essere così gentile e aiutarmi a disegnare una mucca migliore?Disegno di una mucca eccellente

library(ggplot2) 

sim=function(xy){ 
    xx=xy[,"x"]*(-1) 
    yy=xy[,"y"] 
    gg=xy[,"gr"] 
    xy=rbind(xy,cbind(xx,yy,gg)) 
    return(as.data.frame(xy)) 
} 

circleFun <- function(center = c(0,0),diameter = 1, npoints = 100){ 
    r = diameter/2 
    tt <- seq(0,2*pi,length.out = npoints) 
    xx <- center[1] + r * cos(tt) 
    yy <- center[2] + r * sin(tt) 
    return(data.frame(x = xx, y = yy)) 
} 

n=100 

akys <- circleFun(c(1,5),1.5,npoints = n) 
akys=as.matrix(cbind(akys,gr=4)) 
akys=sim(akys) 

akys21 <- circleFun(c(1,4.5),0.5,npoints = n) 
akys21=as.matrix(cbind(akys21,gr=5)) 

akys22 <- circleFun(c(-1,5.3),0.7,npoints = n) 
akys22=as.matrix(cbind(akys22,gr=5)) 

nosis=circleFun(c(0.6,1),0.6,npoints = n) 
nosis=as.matrix(cbind(nosis,gr=6)) 
nosis=sim(nosis) 

x=c(0,1,3,3,2,0,0,1,1,0,3,5,2) 
y=c(0,0,4,6,7,7,0,0,2,2,6,10,7) 
gr=c(2,2,2,2,2,2,3,3,3,3,1,1,1) 
xy=cbind(x=x,y=y,gr=gr) 

data=sim(xy) 
data=rbind(data,akys,akys21,akys22,nosis) 

ggplot()+geom_polygon(data=data,mapping=aes(x=x,y=y,fill=factor(gr),group=gr), linetype=0, colour="black")+theme_bw()+ 
    scale_fill_manual(values=c("cornsilk2","chocolate4","lightpink","white","black","maroon4"))+ 
    theme(axis.line=element_blank(),axis.ticks=element_blank(),axis.text=element_blank(),legend.position="none",panel.grid=element_blank(),panel.border=element_blank())+xlab("")+ylab("")+ 
    ggtitle("Crazy Cow Wishing You Happy Easter!!!") 

See here

+3

Mi chiedo se questo sarebbe meglio come una questione di auto-risposta .. –

+1

@DavidRobinson Sto valutando il suo valore. – joran

+30

Potrebbe essere necessario imburrarci un po 'di più per ottenere questo risultato. Non dovresti davvero mungere StackOverflow in questo modo. Passa a qualcos'altro, nessun toro la prossima volta. – Spacedman

risposta

23

Se siete su Linux e hanno cowsay installato la soluzione è abbastanza semplice:

> system("cowsay I quit") 
________ 
< I quit > 
-------- 
    \ ^__^ 
    \ (oo)\_______ 
     (__)\  )\/\ 
      ||----w | 
      ||  || 
+4

Non è un maschio –

+0

Come ricordo, la mucca può essere maschio. – liuminzhao

+7

Credo che una mucca sia un toro. e credo anche che sia fantastico –