2013-12-09 230 views
3

我有以下代碼繪製的箭頭,用梯度:R:透明顏色使用colorRampPalette

csa <- function(x1,y1,x2,y2,first.col,second.col,length=0.15, ...) { 
    cols <- colorRampPalette(c(first.col,second.col))(250) 
    x <- approx(c(0,1),c(x1,x2), xout=seq(0,1,length.out=251))$y 
    y <- approx(c(0,1),c(y1,y2), xout=seq(0,1,length.out=251))$y 

    arrows(x[250],y[250],x[251],y[251], col=cols[250],length=length, ...) 
    segments(x[-251],y[-251],x[-1],y[-1],col=cols, ...) 

} 

color.scale.arrow <- Vectorize(csa, c('x1','y1','x2','y2')) 

# Create sample data 
x <- c(1,3,5,3,2,1,6,2) 
y <- c(2,5,3,7,2,1,5,6) 

x1 <- c(1,3,5,3) 
y1 <- c(2,5,3,7) 
x2 <- c(2,1,6,2) 
y2 <- c(2,1,5,6) 

# Plot sample data 
plot(x,y, main='') 
color.scale.arrow(x1,y1,x2,y2,'#5F9EA0','#CD3333',lwd=2) 

哪個生成此圖:

enter image description here

我想使這些線透明的,但簡單地爲顏色代碼添加50(即透明度的比例= 50%)不幸的是:

# Plot sample data (transparent?) 
plot(x,y, main='') 
color.scale.arrow(x1,y1,x2,y2,'#5F9EA050','#CD333350',lwd=2) 

任何想法爲什麼這不起作用,以及如何使這些線條透明?

回答

5

我會在生成漸變之後添加透明度,而不是之前。您需要在csa函數中執行此操作,因此請考慮在csacolor.scale.arrow之間添加一個alpha參數。假設你已經這樣做了,就可以生成之後Alpha透明度增加了色彩漸變:

cols <- colorRampPalette(c(first.col,second.col))(250) 
cols <- paste0(cols, alpha) 

另外值得注意的Alpha透明度也就是十六進制:所以"50"不是50%,"7f"是。

+0

這不適用於我的示例數據不幸......我只是在plot(x,y,main ='')命令之後複製並粘貼了你的行,並且還試圖用「7f」而不是50行,但我仍然得到相同的情節(沒有透明度)。我錯過了什麼嗎? – Abdel

+3

你將不得不在'cs'中做'cols'()' – James

+1

@James是對的,我會修改我的答案。 –