2013-03-03 15 views
5

私はラスターグラフ(hovmoller図のような)を作成しようとしており、誰かが助けてくれることを望んでいました。私はrasterVisなどのヘルプを見てきましたが、私のデータに合った例を得ることができないようです。何らかの形で変換が必要なので、私を逃している可能性があります。私はプロットを作成することができましたが、セルの塗りつぶし値は元のデータに対応していません。私は私のデータフレームの例のdput()ファイルをコピーしました(これが正しい方法です)。私が望むのは、DOYの上に48の四角形(DFの時の列)のy軸を持つx軸に沿った年の日(DOY)です。これらの矩形は、各DOYの半時間ごとの間隔を表し、0,1または2の対応するa値(DFのqc列)に応じて色付けされます。Raster Plotの作成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日間しかカバーしていませんが、完全なデータセットは1年間(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

閉じます! 、

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パッケージからsp使用格子グラフィックやニーズに応じて

enter image description here

[OK]を非常にカスタマイズ可能です:この(xとyは、上記のコードによって生成されている)のようなものを試してみてください

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)を選択することをお勧めします

enter image description here

+0

回答をいただきありがとうございますが、qc値がセルにミスアライメントされて同じ問題が発生しました。テストとして、DOY4に対応するすべてのqc値を1に変更すると、プロットの左側にyminからymaxまでの垂直の白線があるはずですが、これは起こりません。どういうわけか、z値の行列が正しい方向に実行されません。 – JonP

+0

Simonさん、ありがとうございました。はい、あなたのソリューションが理想的なので、非常にありがとう、個々の細胞を識別したいと思いました。 – JonP

+0

@JonPよかった!あなたは今あなたの答えの横にある緑色の矢印、またはこれがあなたの質問に答えたことを示すために鉱山をチェックしてください。 –

3

OKが、これは今働いなった、むしろあまりにも...

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

申し訳ありませんが、それは私が想像よりも、むしろより簡単でした。伝説的な色は連続的ではなく離散的であることを好みますが、それは軽微なものです。あなたのご意見ありがとうございます。

ジョン
+0

++は、このスレッドではコミュニケーション性と有益性の両方を備えています。あなたのRコミュニティの周りにもっとあなたを見て欲しいです。 –

0

rasterVisパッケージからhovmoller関数は4Dデータ(座標、数値変数及び時間 指標)のため 設計されています。しかし、間違っていない場合は、レベルプロットを使って単変量 時系列をプロットする必要があります。

ここでは、lattice::levelplotの例を示します。

まず、我々は時間インデックスを使用してデータを定義します。

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

次に、我々は時間のインデックスから 年の時間と曜日を抽出するために2つの補助関数を定義します。

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

その後パッケージを読み込み、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 に興味があるかもしれません。