2013-09-02 3 views
2

약 500x500 인 상 삼각 행렬을 시각화하려고합니다. 이 외에도 나는 또한 보이도록 삼각형이 위쪽을 가리키는 것처럼 그 이미지를 회전하는 것을 시도하고있다 :행렬 시각화 및 회전

enter image description here

은 (이것은 해당 이미지를 회전 한 다음 그래픽 장치의 스냅 샷을 복용에 의해 이루어졌다).

이미지에서와 같이 각 열과 행의 너비가 지정되어 있어야합니다.

나는 grid 패키지 (45도 회전 한 뷰 패널 사용)로 image() 기능을 사용해 보았지만 작동하지 않았습니다. 아무도 더 나은 해결책을 알고 있습니까? 여기

+0

패키지에는 'image' 함수 없다'격자 '. 아마도 해당 데이터의 10 x 10 섹션을 사용하고 사용중인 코드를 제공하면 도움이 될 것입니다. –

+0

시각화하려는 데이터가 무엇인지는 모르지만 아마 아크 다이어그램의 개념을 살펴볼 수 있습니까? http://gastonsanchez.wordpress.com/2013/02/03/arc-diagrams-in-rles-miserables/ –

+0

사과 @DWin, 나는 그 말을 잘못했다. 기본 그래픽에서'image()'함수를 사용하고 그리드를 사용하여 그래픽 장치의 스냅 샷을 찍은 다음'grid'를 사용하여 회전시키고 그릴 것을 의미합니다. @ h.l.m, 나는이 다이어그램을 알고 있지만, 이런 식으로 데이터를 표시하는 것이 바람직합니다. – Jan

답변

4

사용하여 간단한 바보 접근베이스 그래픽스 rasterImage :

plotTriMatrix <- function(x) { 
    ## clear lower triangle 
    x[lower.tri(x)] <- NA 

    ## calculate diag 
    nr <- nrow(x) 
    nc <- ncol(x) 
    d <- sqrt(nr^2 + nc^2) 
    d2 <- 0.5 * d 

    ## empty plot area 
    plot(NA, type="n", xlim=c(0, d), ylim=c(0, d), xlab="", ylab="", asp=1) 

    ## plot matrix and rotate 45 
    rasterImage(as.raster(x), 
       xleft=d2, xright=d2+nc, ybottom=-d2, ytop=-d2+nr, 
       interpolate=FALSE, angle=45) 
} 

예 :

set.seed(123) 
m <- matrix(runif(100), 10, 10) 

plotTriMatrix(m) 

enter image description here

+1

그 예제는 아주 잘 작동합니다. 그러나 각 행과 열의 너비는 조정할 수 있어야합니다. 내가 말할 수있는 한, 당신의 예제는 단지 매트릭스 밖으로 비트 맵을 생성합니다. – Jan

+1

글쎄,'image' 함수가 "비트 맵 만 생성하기"때문에, sgibb은 당신이 원한 것이라고 생각하는 그의 권리 안에 있다고 생각합니다. –

+0

실제로 @Jan이 말한 것을 보았습니다.이 예는 '이미지'와 달리 플롯 장치의 매우 구체적인 치수로만 올바르게 보입니다. ('plot' 명령은'asp = 1'을 필요로합니다.) – blmoore