2013-02-04 1 views
0

여러 길이의 여러 데이터 시리즈가 포함 된 플롯을 점진적으로 작성하려고합니다. 제 목표는 각 데이터 시리즈의 모양을 제어 할 수있게하는 것입니다. 에는 사용자 정의 이름 을 지정하고 해당 범례를 사용하는 것이 좋습니다. 내 데이터 시리즈의 길이가 다르기 때문에 단일 데이터 프레임에 삽입 할 수 없습니다. 각각사용자 정의 색상, 범례 등을 사용하여 ggplot에 여러 데이터 시리즈를 그릴 수있는 적절한 방법

library(ggplot2) 
    set.seed(12345) 
    plt <- ggplot() 
    colors <- c('red', 'blue', 'green', 'black') 
    for(i in seq(length(colors))) { 
     x <- seq(1, 2*i) 
     y <- x * i + rnorm(length(x)) 
     df <- data.frame(x=x, y=y) 
     plt <- plt + geom_point(aes(x, y), data=df, color=colors[i]) + 
     geom_line(aes(x, y), data=df, color=colors[i]) 
    } 
    print(plt) 

이 내가 무엇을 얻을, 다음 사람은 파란색, 녹색과 검은 색 될 것입니다 짧은 빨간색 될 것입니다 : 코드에서 아래 나는 4 선을 기대합니다. my plot

어떻게 이름을 줄에 표시하고 범례를 표시 할 수 있습니까? 내 목표를 달성하는 더 좋은 방법이 있습니까? 이처럼

:

답변

2

이 작업을 수행하는 방법은 긴 형식에 하나의 데이터 프레임을 생성하는 것입니다

library(ggplot2) 
set.seed(12345) 
colors <- c('red', 'blue', 'green', 'black') 
dat <- lapply(seq_along(colors), function(i){ 
    x <- seq(1, 2*i) 
    data.frame(
    series = colors[i], 
    x = x, 
    y = x * i + rnorm(length(x)) 
)} 
) 
dat <- do.call(rbind, dat) 

지금 플롯

ggplot(dat, aes(x, y, color=series)) + geom_line() 

enter image description here

+1

좋은,하지만 문제가있다 : 여기에 당신이 기대하는 생각의 시리즈 이름 (색상) 라인의 색상과 일치하지 않습니다. –

+0

네,하지만이게 정말로 중요합니까? 제 말은, 진짜 라벨은 라인의 색깔이 아닌 실제 물건을 가리킬 것입니다. 문제가 발생하면 'scale_colour_manual()'또는 다른 색상 비율로 조절할 수 있습니다. – Andrie

2

을 사용할 필요가 없습니다.을 사용하고 길이가 다른 데이터를 구성한 후 매번 플롯합니다. 이것은 ggplot2이 굉장한 이유입니다! 각 데이터 세트에 대해 group을 만들 수 있습니다. 그리고 당신이 원한다면 그 라인을 같은 group을 사용하여 원하는대로 지정할 수 있습니다 (물론 전설에서 직접 변경할 수 있습니다. 나중에 원할 경우 변경할 수 있습니다).

set.seed(12345) 
require(ggplot2) 
require(plyr) 
# to group your data. change the letters to whatever you want to appear as legend 
line_names <- letters[1:4] 
# Use plyr to create your x and y for each i and add the group. 
dat <- ldply(1:length(colors), function(i) { 
    x <- seq(1, 2*i) 
    y <- x * i + rnorm(length(x)) 
    data.frame(x=x, y=y, grp=line_names[i]) 
}) 

# just plot here. 
ggplot(data = dat, aes(x=x, y=y)) + geom_line(aes(colour=grp)) + geom_point() 

ggplot2_multiple_lines

관련 문제