2013-05-17 223 views
1

我有一個二維圖。它上面的每個點都有一些值(如y),範圍從01。我想用顏色在圖上顯示這些值。例如,如果任何點的值小於0.25,它應該是​​,其值在0.250.5之間的點將是yellow,其餘的是red。如何在R中實現此目的。 以下是對(i,j)代表的各個點產生y的代碼。如何在R中繪製顏色圖

library(reldist) 
i <- 0 
for(i in seq(from=0, to=.8, by=0.1)){ 
j <- 0 
for(j in seq(from=0, to=1, by=0.1)){ 

a <- evalq(i*(1+i^2-i^2*j)/((1+i)^2*(1+i^2))) 
b <- evalq(i*(1-j)/(1+i)) 
c <- evalq(((1-j)/(1+i))-i*(1+i^2-i^2*j)/((1+i)^2*(1+i^2))) 

x <- c(a,b,c) 
y <- gini(x) # i want to plot y 
print(y) 

} 
} 
+0

如果你想繪製你的數據線,而不是點,你可以在'plotrix'使用'clplot'工具(免責聲明 - 我寫了那個工具)。 –

回答

1

嘗試

plot(y , col = ifelse(y < 0.25 , 'green', ifelse(y < 0.5 , 'yellow' , 'red'))) 
1

您可以定義一個新的變量,指標的顏色要使用cut()功能。例如,

# I created an example i, j, and y rather than using your code for simplicity 
df <- expand.grid(i=seq(0, 0.8, 0.1), j=seq(0, 1, 0.1)) 
y <- runif(dim(df)[1]) 

# define the colors you want 
mycol <- c("green", "yellow", "red") 

# define a color index based on y using the breaks you want 
yindex <- cut(y, c(0, 0.25, 0.5, 1), labels=FALSE) 

# scatterplot using the specified colors 
plot(df$i, df$j, col=mycol[yindex]) 
0

使用outer將結果作爲矩陣。它比for循環更容易。

i <- seq(from=0, to=.8, by=0.1) 
j <- seq(from=0, to=0.9, by=0.1) 

res <- outer(i,j,FUN=Vectorize(function(i,j) { 
    require(reldist) 
    a <- i*(1+i^2-i^2*j)/((1+i)^2*(1+i^2)) 
    b <- i*(1-j)/(1+i) 
    c <- ((1-j)/(1+i))-i*(1+i^2-i^2*j)/((1+i)^2*(1+i^2)) 
    gini(c(a,b,c)) 
}) 
) 

使用image密謀:

image(res, breaks = c(-1000,.25,.5,1000),col = c("green","yellow","red"), 
     axes=FALSE,xlab="i",ylab="j") 
axis(1, at = seq(0,1,length.out=length(i),labels=i) 
axis(2, at = seq(0,1,length.out=length(j),labels=j) 

enter image description here