2013-05-06 10 views
7

Bu kodu [dot] net istatistiklerinden ödünç aldım. Sonuç normal dağılım altında renkli bir alandır.Görüntünün çokgenin rengi olarak ayarlanması

mean=100; sd=15 
lb=80; ub=120 

x <- seq(-4,4,length=100)*sd + mean 
hx <- dnorm(x,mean,sd) 

plot(x, hx, type="n", xlab="IQ Values", ylab="Density", 
    main="Normal Distribution", axes=FALSE) 

i <- x >= lb & x <= ub 
lines(x, hx) 
polygon(c(lb,x[i],ub), c(0,hx[i],0), col="red") 

area <- pnorm(ub, mean, sd) - pnorm(lb, mean, sd) 
result <- paste("P(",lb,"< IQ <",ub,") =", 
    signif(area, digits=3)) 
mtext(result,2) 

enter image description here

Ben kırmızı çokgenin rengi gibi bir görüntü seçmek mümkün olup olmadığını merak ediyorum?

Çok teşekkürler!

cevap

10

Kodunuzla çalışıyorum, temel olarak png paketini kullanarak (In R, how to plot with a png as background? numaralı öneriye dayanarak) bir görüntüyü (aşağıda rastgele bir resim kullandım) çizmeyi ve ardından çizgilerinizi bunun üzerine çizmenizi öneririm.

mean=100; sd=15 
lb=80; ub=120 

x <- seq(-4,4,length=100)*sd + mean 
hx <- dnorm(x,mean,sd) 

# load package and an image 
library(png) 
ima <- readPNG("Red_Hot_Sun.PNG") 

# plot an empty plot with your labels, etc. 
plot(1,xlim=c(min(x),max(x)), type="n", xlab="IQ Values", ylab="Density", 
    main="Normal Distribution", axes=FALSE) 
# put in the image 
lim <- par() 
rasterImage(ima, lim$usr[1], lim$usr[3], lim$usr[2], lim$usr[4]) 

# add your plot 
par(new=TRUE) 
plot(x, hx, xlim=c(min(x),max(x)), type="l", xlab="", ylab="", axes=FALSE) 
i <- x >= lb & x <= ub 
lines(x, hx) 
# add a polygon to cover the background above plot 
polygon(c(x,180,180,20,20), c(hx,0,1,1,0), col="white") 
# add polygons to cover the areas under the plot you don't want visible 
polygon(c(-20,-20,x[x<=lb],lb), c(-10,min(hx),hx[x<=lb],-10), col="white") 
polygon(c(ub,x[x>=ub],200,200), c(-1,hx[x>=ub],min(hx),-1), col="white") 

# add your extra text 
area <- pnorm(ub, mean, sd) - pnorm(lb, mean, sd) 
result <- paste("P(",lb,"< IQ <",ub,") =", 
    signif(area, digits=3)) 
mtext(result,2) 

size verir:

An image

+0

Müthiş! Çok teşekkürler! –