2016-08-17 2 views
0

제목/질문을 올바로 형식화했는지 확실하지 않습니다. 어쩌면 내 문제 중 하나가 내 어휘에서 용어가 누락 된 것일 수 있습니다. 죄송합니다. 하지만 시도해보십시오 :R의 3d-plot에서 여러 2d-plot을 그리는 방법은 무엇입니까?

나는 데이터가 (이 예제에서는 sleep) 나는 3 차원으로 설명합니다. 아마 진짜 통계가 그걸하지 않을거야?

저는 여러 개의 2 차원 그림을 3 차원 그림으로 그려보고 싶습니다. 나는 그 (것)들을 나란하게 음모를 꾸미고 싶다. 내가 틀렸다면 나를 바로 잡아주세요. 여기

enter image description here

내 문제는 한 줄 있다는 것입니다. 두 그룹이 있습니다. 나는 그룹당 한 줄을 원한다. type='h'와 같은 데이터가 더 나은 설명을 제공 내 생각 :

enter image description here

당신이 여기에 두 줄을 상상할 수 있습니까? 나는 그 개념에서 무엇을 놓치고 있는가? 인쇄/출판을 위해 다른 플롯 라이브러리를 사용할 수 있습니다. 현재 어느 것이 나에게 중요하지 않습니다. 어쩌면 내가 틀린 곳에서 완전히 합쳤을 까?

require('mise') 
require('scatterplot3d') 
mise() # clear the workspace 

# example data 
print(sleep) 

scatterplot3d(x=sleep$ID, 
       x.ticklabs=levels(sleep$ID), 
       y=sleep$group, 
       y.ticklabs=levels(sleep$group), 
       lab = c(length(unique(sleep$ID)), 1), 
       z=sleep$extra, 
       type='o') 

그리고 당신은 두 단계로 수동 라인을 추가 할 수

extra group ID 
1 0.7  1 1 
2 -1.6  1 2 
3 -0.2  1 3 
4 -1.2  1 4 
5 -0.1  1 5 
6 3.4  1 6 
7 3.7  1 7 
8 0.8  1 8 
9 0.0  1 9 
10 2.0  1 10 
11 1.9  2 1 
12 0.8  2 2 
13 1.1  2 3 
14 0.1  2 4 
15 -0.1  2 5 
16 4.4  2 6 
17 5.5  2 7 
18 1.6  2 8 
19 4.6  2 9 
20 3.4  2 10 

답변

1

데이터 :

# Store the plot in rr 
rr <- scatterplot3d(x=as.numeric(sleep$ID), 
        x.ticklabs=levels(sleep$ID), 
        y=sleep$group, 
        y.ticklabs=levels(sleep$group), 
        z=sleep$extra) 
# find all that belong to group one 
idx = sleep$group == 1 
# add the first line 
rr$points3d(x = sleep$ID[idx], y = rep(1, each = sum(idx)), z = sleep$extra[idx], type = 'l', col = 'red') 
# add the second line 
rr$points3d(x = sleep$ID[!idx], y = rep(2, each = sum(!idx)), z = sleep$extra[!idx], type = 'l', col = 'blue') 

그래서 라인 대신 리본을 추가

코드입니다 상황이 조금 바뀝니다. 특히 리본은 polygon 기능으로 플롯됩니다. 그러나이 함수는 2D 좌표 만 처리하므로 함수 rr$xyz.convert을 사용하여 3D 좌표를 2D 좌표로 변환해야합니다.

rr <- scatterplot3d(x=sleep$ID, 
        x.ticklabs=levels(sleep$ID), 
        y=sleep$group, 
        y.ticklabs=levels(sleep$group), 
        z=sleep$extra) 
idx = sleep$group == 1 
# draw first group 
mat = matrix(c(rep(sleep$ID[idx], 2), 
       rep(c(1, 1.05), each = sum(idx)), # 1.05 determines width 
       rep(sleep$extra[idx], 2)), ncol = 3) 
ll = rr$xyz.convert(mat) 
polygon(x = ll$x[c(1:10, 20:11)], 
     y = ll$y[c(1:10, 20:11)], col = 'red') 
# draw second group 
mat = matrix(c(rep(sleep$ID[!idx], 2), 
       rep(c(2, 1.95), each = sum(!idx)), # 1.95 determines width 
       rep(sleep$extra[!idx], 2)), ncol = 3) 
ll = rr$xyz.convert(mat) 
polygon(x = ll$x[c(1:10, 20:11)], 
     y = ll$y[c(1:10, 20:11)], col = 'blue') 
+0

이것은 내 최우선 과제에 완벽하게 맞지 않지만 어떻게이 두 줄을 리본으로 그릴 수 있습니까? IMO는 여기에있는 해결책이 좋지 않으며 실제로 데이터를 이해하는 데 도움이되지 않습니다. – buhtz

+0

플롯을 어떻게 보이게 할 것인지 예를 들어 설명해 줄 수 있습니까? 아마 이런 식이지만 두 줄로 된 것일까? http://i.stack.imgur.com/kBINP.png – Vandenman

+0

예, 멋지게 보입니다. – buhtz

관련 문제