2013-12-09 1 views
3

를 사용하여 투명 색상 I이 그라데이션으로 화살표를 그립니다 다음 코드 :이 그림 생산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 %) 불행하게도 작동하지 않습니다.

이것이 작동하지 않는 이유와이 줄을 투명하게 만드는 방법에 대해 알고 싶습니다.

답변

5

이전에 그라데이션을 생성 한 후에 투명도를 추가했습니다. csa 함수에서이 작업을 수행해야하므로 alpha 인수를 csacolor.scale.arrow에 모두 추가하는 것이 좋습니다. 당신이 이렇게 한 가정하면, 당신은 그것을 생성 후 컬러 그라데이션에 알파 투명도를 추가 할 수 있습니다

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

알파 투명도를 주목할 가치는 16 진수 : 그래서 "50" 50 %, "7f"가 없습니다.

+0

불행히도 필자의 예제 데이터에서는 작동하지 않습니다 ... 플롯 (x, y, main = '') 명령 다음에 줄을 복사하여 붙여 넣은 다음 50 대신 "7f"를 사용하여 해당 줄을 시도했습니다 ,하지만 나는 같은 음모를 계속 간직하고있다. 내가 놓친 게 있니? – Abdel

+3

당신은'csa()'의'cols'에 이것을해야 할 것입니다. – James

+1

@James가 맞습니다. 제 답변을 수정하겠습니다. –