2016-08-12 4 views
0

으로 변경하십시오. 세 개의 매개 변수 x, y, z가있는 function_3d가 있다고 가정합니다. 함수가 정의된다고 가정 다음ggplot2에서 두 번째 그룹의 제목을 R

function_3d <- function(x, y, z) { 
    return(x + y * 10 + z * 100) 
} 

I 서열에 x의 ggplot2를 사용하여이 기능을 플롯하고 (0, 10, 1) Y는 C의 값을 갖는다 (1, 3, 5, 7) z는 c (2, 4, 6)의 값을가집니다. 여기

내 접근 방식 :

require('ggplot2') 
require('dplyr') 

function_3d <- function(x, y, z) { 
    return(x + y * 10 + z * 100) 
} 


x_vec <- seq(0, 10, 1) 
y_vec <- c(1, 3, 5, 7) 
z_vec <- c(2, 4, 6) 

allframes <- 
    lapply(z_vec, function(inp.z.val) { 
    (lapply(y_vec, function(inp.y.val) 
    { 
     data.frame(
     x = x_vec, 
     y = function_3d(x = x_vec, 
         y = inp.y.val, 
         z = inp.z.val), 
     group_y = inp.y.val, 
     group_z = inp.z.val 
    ) 
    })) 
    }) 

# Bind all the frames 
# Note: we can use dply::bind_rows instead of rbind 
df.out <- do.call(rbind, do.call(rbind, allframes)) 

ggplot(df.out, 
     aes(
     x = x, 
     y = y, 
     shape = factor(group_y), 
     colour = factor(group_z), 
     group = interaction(group_y, group_z) 
     )) + 
    geom_line(aes(linetype=factor(group_y)), alpha = .9, size = 1) + 
    scale_x_continuous(name = "X Label") + 
    scale_y_continuous(name = "Y Label") + 
    ggtitle("Plot Title") + 
    scale_colour_brewer(palette = "Set1") + 

    labs(aes(colour = "Label of each plot z")) + 
    theme(legend.key.width=unit(3, "line")) 

그리고 그 결과는 다음과 같습니다

Plot of function_3d

지금 나는 두 가지 질문이있다 : 나는 Y의 레이블을 변경할 수있는 방법

1) 그룹 (나는 change factor (group_y) 텍스트를 의미합니까?)

2)이 플롯을 만드는 더 좋은 방법이 있습니까? 마지막에 추가

답변

1

^^ 나에게 좋은 ggplot2 보인다 이 상황에 맞게 만들어진 expand.grid를 사용합니다.

ggplot에서 group_y, group_z의 상호 작용이 필요한 이유가 표시되지 않습니까?

library(ggplot2) 
function_3d <- function(x, y, z) { 
    return(x + y * 10 + z * 100) 
} 

df.out <- expand.grid(x = seq(0, 10, 1), 
         group_y = c(1, 3, 5, 7), 
         group_z = c(2, 4, 6)) 

df.out$y <- function_3d(df.out$x, df.out$group_y, df.out$group_z) 

ggplot(df.out, aes(x = x, y = y)) + 
    geom_line(aes(color = factor(group_z), linetype = factor(group_y))) + 
    xlab("Test label x") + 
    ylab("Test label y") + 
    ggtitle("testtitle") + 
    scale_color_brewer(palette = "Set1", name = "color label") + 
    scale_linetype_discrete(name = "linetype label") 
: 내가했을 무엇

는 다음과

0

1) '+ scale_linetype_discrete (이름 ='foo는 ')

2) 당신이 대폭하여 data.frame의 생성을 간소화 할 수

관련 문제