2017-10-07 4 views
1

하나의 그래프에 13 개의 선을 그려보고 싶습니다. 각 줄은 'basin'열의 문자로 그룹화 된 내 데이터의 하위 집합을 나타냅니다. 내가 가지고있는 것은 좋지만 for-loop를 사용하여보다 효율적으로 만들고 싶습니다. Here's what the output looks like.문자의 for-loop를 사용하여 특정 색상으로 여러 줄을 그립니다.

단순화 dataframe가 함께 작동하도록 :

basinlist <- c('BLK','DUC','WHP') 
plot(sal~date, data = env, type = 'n', ylim = c(0,10), ylab = 'Salinity') 
for(i in basinlist){ 
    lines(sal[basin==i] ~ date[basin==i], data = env, 
     col = c(4,4,2), 
     lty = c(1,1,2)) 
} 

enter image description here :

env <- data.frame(basin = c('BLK','DUC','WHP','BLK','DUC','WHP','BLK','DUC','WHP'), 
        sal = c(5,6,3,2,4,5,6,8,4), 
        date = c(2013,2013,2013,2015,2015,2015,2017,2017,2017)) 

그리고 작동하지 않았다 무엇의 단순화 된 버전 (이 실행되지만 모든 라인 파란색과 고체한다)

i이 문자 인 경우 각 반복마다 색상을 변경하는 방법을 모르는 것이 문제입니다. 이 문제를 검색하면 i이 숫자 일 때 또는 모든 색상이 다른 선을 만들기위한 해결책이 될뿐만 아니라 어느 것도 내 목표는 아닙니다.

다른 곳에서 게시 된 답변을 찾는 것보다 내 자신의 질문을 처음으로 물어 본 것이므로 다른 것이 필요한 경우 알려 주시기 바랍니다.

+0

두 변수가 필요은'basin' 용과 컬러 인덱스 하나'(seq_along (basinlist)에서 II)에 대해 {난 <- basinlist을 [II]; lang = c (1,1,2) [ii]), 데이터가 env, col = c (4,4,2) [ii] 일 때, 행 (sal [basin == i] ~ date [basin == i] }' – rawr

+0

티켓이었습니다! 'seq_along'은 내가 필요한 것입니다. 내가 이해하고 있음을 확신하기 위해 길이가'basinlist' (1:13)인데, ii를 숫자로, i를 유역 이름으로 사용할 수 있다는 의미인가? –

+0

알았어. 대부분의 사람들은'seq (x)'대신'1 : length (x)'를 사용하는 경향이 있고'seq_along (x)'루프에서는 더 안전하게 사용하는 경향이 있지만'x <- character (0)'인 경우 매우 다른 결과를 얻습니다 '1 : length (x)'와'seq_along (x)' – rawr

답변

1

루프의 각 반복마다이 경우 벡터의 인덱스와 변수 자체가 필요합니다. 원하는 플롯을 얻는 쉬운 방법은 인덱스를 반복하고 (아래 예에서 ii) 각 반복마다 벡터 요소를 얻는 것입니다 (앞에서와 마찬가지로 i).

env <- data.frame(basin = c('BLK','DUC','WHP','BLK','DUC','WHP','BLK','DUC','WHP'), 
        sal = c(5,6,3,2,4,5,6,8,4), 
        date = c(2013,2013,2013,2015,2015,2015,2017,2017,2017)) 

basinlist <- c('BLK','DUC','WHP') 
plot(sal~date, data = env, type = 'n', ylim = c(0,10), ylab = 'Salinity') 

for (ii in seq_along(basinlist)) { 
    i <- basinlist[ii] 
    lines(sal[basin==i] ~ date[basin==i], data = env, 
     col = c(4,4,2)[ii], 
     lty = c(1,1,2)[ii]) 
} 

enter image description here