2013-03-03 9 views
5

나는 hovmoller 다이어그램과 같은 래스터 그래프를 만들려고 노력 중이며 누군가 도움을 얻기를 바랍니다. 저는 rasterVis와 다른 사람들의 도움을 보았습니다. 그러나 내 데이터에 어울리는 예제를 얻지 못했을 것입니다. 아마도 그것은 어떤면에서 변형되어서는 안되는 것이지요. 플롯을 만들 수 있었지만 셀의 채우기 값은 원래 데이터와 일치하지 않습니다. 내 데이터 프레임 예제의 dput() 파일을 복사했습니다.이 작업을 수행하는 올바른 방법입니다. 내가 원하는 것은 각 DOY 위에 48 개의 직사각형 (DF의 시간 열)의 y 축이있는 x 축을 따라 일 (DOY)입니다. 이 사각형은 각 DOY에 대해 30 분의 간격을 나타내며 0,1,2의 해당 값 (DF의 qc 열)에 따라 색칠됩니다.Raster plot in R

지금까지 다음 코드를 작성했습니다. 일어나고있는 것 같다 무엇

mcol <- c("green","blue","red") 
x=unique(DF[,"DOY"]) 
y=unique(DF[,"hour"]) 
z=matrix(DF[,"qc"],nrow=length(unique(DF[,"DOY"])), 
        ncol=length(unique(DF[,"hour"]))) 
image(x,y,z, col=mcol, 
    xlab="Day of Year 2012", 
    ylab="Hour of day", 
    main="Hovmoller plot of 2012 qc flags", 
useRaster=TRUE) 

가 있다는 것입니다 ...는 z 값 (QC 열) 색상에, 내가 값이 어떤 이유로 제대로 안감되지 않은 생각의 할당에 문제가 될 것으로 보인다 채우기 값 행렬 (z)은 x 축의 맨 아래를 따라 (왼쪽에서 오른쪽으로) 실행 한 다음 상단으로 반복하면서 적용됩니다. 반면에 왼쪽 하단에서 시작하여 왼쪽에서 오른쪽으로 루프가 필요합니다. 어떤 종류의 감각을 만든다!) 여기 예제 데이터는 3 일 동안 만 다루지 만 전체 데이터 세트는 전체 연도 (2012 년 366)가됩니다. 사전에 어떤 도움 감사합니다,

structure(list(DOY = c(4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L), hour = c(0.5, 1, 1.5, 2, 2.5, 3, 3.5, 
4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8, 8.5, 9, 9.5, 10, 10.5, 11, 
11.5, 12, 12.5, 13, 13.5, 14, 14.5, 15, 15.5, 16, 16.5, 17, 17.5, 
18, 18.5, 19, 19.5, 20, 20.5, 21, 21.5, 22, 22.5, 23, 23.5, 24, 
0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6, 6.5, 7, 7.5, 
8, 8.5, 9, 9.5, 10, 10.5, 11, 11.5, 12, 12.5, 13, 13.5, 14, 14.5, 
15, 15.5, 16, 16.5, 17, 17.5, 18, 18.5, 19, 19.5, 20, 20.5, 21, 
21.5, 22, 22.5, 23, 23.5, 24, 0.5, 1, 1.5, 2, 2.5, 3, 3.5, 4, 
4.5, 5, 5.5, 6, 6.5, 7, 7.5, 8, 8.5, 9, 9.5, 10, 10.5, 11, 11.5, 
12, 12.5, 13, 13.5, 14, 14.5, 15, 15.5, 16, 16.5, 17, 17.5, 18, 
18.5, 19, 19.5, 20, 20.5, 21, 21.5, 22, 22.5, 23, 23.5, 24), 
    qc = c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 1L, 2L, 1L, 1L, 2L, 2L, 0L, 0L, 1L, 0L, 2L, 2L, 2L, 2L, 
    2L, 2L, 0L, 2L, 2L, 0L, 0L, 1L, 2L, 0L, 2L, 0L, 1L, 2L, 1L, 
    2L, 2L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 2L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 
    0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 2L, 2L, 2L, 2L, 0L, 0L, 
    2L, 0L, 0L, 0L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
    2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L)), .Names = c("DOY", 
"hour", "qc"), class = "data.frame", row.names = c(NA, -144L)) 
+1

'library (raster); plot (raster (t)))'과 같은 것? –

답변

4

닫기! 이 같은 (x와 y 위의 코드에 의해 생성되는)보십시오 : 귀하의 요구

enter image description here

확인에 따라 패키지 sp 사용 격자 그래픽에서

library(sp) 
r <- raster(nrows=length(y), ncols=length(x), xmn=min(x), xmx=max(x), ymn=min(y), ymx=max(y)) 
values(r) <- t(DF$qc) 
spplot(r , cuts = 2) 

spplot을 매우 사용자 정의 할 수 있습니다,

p <- ggplot(DF , aes(factor(DOY), hour)) + 
    geom_tile(aes(fill = factor(qc)) , color = "#D9D9D9") + 
    scale_fill_brewer(name="QC", type = "div" , palette = "RdBu")+ 
    scale_x_discrete(name = "Day" , expand = c(0,0)) + 
    scale_y_continuous(name = "Hour" , limits = c(0.5,24) , expand = c(0,0) , breaks = seq(0,24,2))+ 
    coord_equal() 
print(p) 
(다른 셀을 식별 할 수 있도록하려면 geom_tile)을 선택하는 것이 좋습니다 (래스터 셀 수가 커질 때까지). 6,

enter image description here

+0

답장을 보내 주셔서 감사하지만 qc 값이 셀에 오정렬되어 동일한 문제가 발생했습니다. 테스트에서 DOY4에 해당하는 모든 qc 값을 1로 변경하면 플롯 왼쪽의 ymin에서 ymax까지의 수직 흰색 선이 있어야합니다. 이는 발생하지 않습니다. 어떻게 든 z 값에 대한 행렬은 올바른 방향으로 실행되지 않습니다. – JonP

+0

감사합니다. Simon, 예. 개별 셀을 식별하여 솔루션이 이상적이므로 대단히 감사합니다. – JonP

+0

@JonP 좋습니다! 답변 옆에있는 녹색 화살표 나 내 질문에 답변했음을 나타내는 내 표시를 눌러야합니다. –

3

확인이 지금 당장 일을 얻고, 단순히 너무 ...

library(ggplot2) 
ggplot(DF,aes(DOY,hour,fill=qc))+geom_raster() 

죄송합니다, 그것이 내가 상상했던 것보다 오히려 더 간단했다. 전설의 색상을 연속보다는 이산적인 색상으로 선호하지만 사소한 세부 사항입니다. 귀하의 의견을 보내 주셔서 감사합니다. 존

+0

++는이 스레드에서 의사 소통 적이며 유익한 정보를 제공합니다. R-community에서 더 많은 사람들을 만나기를 바랍니다. –

0

rasterVis 패키지에서 hovmoller 기능 4D 데이터 (좌표, 수치 변수 및 시간 인덱스) 대 설계된다. 그러나, 내가 잘못하지 않았다면, 레벨 플롯을 사용하여 단 변량 시계열을 플로팅해야합니다.

여기에 lattice::levelplot의 예가 나와 있습니다.

첫째, 시간 인덱스 데이터 정의 : 다음

hour <- function(x)as.numeric(format(x, '%H')) 
DoY <- function(x)as.numeric(format(x, '%j')) 

:

tt <- seq(as.POSIXct('2013-01-01'), by='hour', length=8760) 
vals <- 1:24 - 12.5 
myDF <- data.frame(vals, tt) 

다음에, 우리는 시간 인덱스에서 시간 올 일을 추출 개의 보조 기능을 정의 패키지를로드하고 RColorBrewer 패키지의 팔레트 순으로 테마를 정의합니다.

library(lattice) 
library(latticeExtra) 
myTheme <- custom.theme(region=brewer.pal(n=10, 'RdBu')) 

그리고 마지막으로, 우리는 데이터를 표시 할 준비가 : 더 완벽한 솔루션에 대한

levelplot(vals ~ DoY(tt)*hour(tt), 
      data=myDF, 
      xlab='Day', ylab='Hour', 
      par.settings=myTheme) 

levelplot result

, 당신은 metvurst packagestrip function 에 관심이있을 수 있습니다.