5

ラスター属性テーブル情報を利用して、ラスター1などのラスターの凡例を作成し、ラスターに表示されているクラスのみ凡例を表示したいと考えています。何を取得したいかを説明する例を作成します。

1/ ラスターを構築する

r <- raster(ncol=10, nrow=10)
values(r) <-sample(1:3,ncell(r),replace=T)

2/ ラスター属性テーブルを追加する

r <- ratify(r) # build the Raster Attibute table
rat <- levels(r)[[1]]#get the values of the unique cell frot the attribute table
rat$legend <- c('Class A', 'Class B', 'Class C')
levels(r) <- rat

3/ ラスターをプロットするFig 1

my_col=c('blue','red','green')
plot(r,col=my_col,legend=F,box=F,axes=F)
legend(x='top', legend =rat$legend,fill = my_col)

legend =rat$legendパラメータを、ratser 属性テーブルにリンクされたラスタのプロパティに置き換えたいと思います。levels()などを使用してさまざまな組み合わせを試しc(levels(r)[[1]][1])ましたが、凡例パラメーターで使用できない文字ではなく、リストを生成します。

4/ ラスターをクロップして、2 クラスのみの部分にプロットします (ここでは、右下の範囲の 4 ピクセル)2

rcrop<-crop(r,extent(r,9,10,9,10))
plot(rcrop,col=my_col,legend=F,box=F,axes=F)

この 2 番目の図では、ラスター2に表示されるクラスの凡例のみを自動的に表示したいと思います。

凡例付きラスター

凡例付きのトリミングされたラスター


以下は、Roman 4によって提案された解決策です。 ローマンが提案した解決策

4

3 に答える 3

1

ありがとう。あなたが提案したことに基づいて、私は解決策を見つけました:

plot(rcrop,col=my_col[unique(getValues(rcrop))],legend=F,box=F,axes=F)
legend_full<-data.frame(levels(rcrop))
legend(x='top', legend =as.character(unlist(legend_full[unique(getValues(rcrop)),2])),fill = my_col[unique(getValues(rcrop))])

これは機能し、ラスターに表示される値に依存しないようにします。

于 2013-10-25T12:55:48.707 に答える