Rで視覚的に魅力的な密度ヒートマップを生成する


27

Rにヒートマップを生成するための一連の機能があることは知っていますが、問題は視覚的に魅力的なマップを作成できないことです。たとえば、下の画像は、避けたいヒートマップの良い例です。最初のものは明らかに詳細に欠けていますが、もう1つは(同じ点に基づいて)あまりにも詳細すぎて有用ではありません。両方のプロットは、spatstat Rパッケージのdensity()関数によって生成されています。

どうすればプロットに「フロー」を追加できますか?私が目指しているのは、市販のSpatialKeyスクリーンショット)ソフトウェアの結果が生成できる外観の詳細です。

この方向に私を連れて行くことができるヒント、アルゴリズム、パッケージまたはコードの行はありますか?

ここに画像の説明を入力してください


image()関数を見ましたか?ブレークの数を増やすと、解像度が上がります。
マクロ

回答:


28

プロットの滑らかさに影響を与えるものは2つあります。カーネル密度の推定に使用される帯域幅と、プロットで色を割り当てるブレークです。

私の経験では、探索的分析のために、有用なプロットが得られるまで帯域幅を調整するだけです。以下のデモ。

library(spatstat)
set.seed(3)
X <- rpoispp(10)
par(mfrow = c(2,2))
plot(density(X, 1))
plot(density(X, 0.1))
plot(density(X, 0.05))
plot(density(X, 0.01))

ここに画像の説明を入力してください

デフォルトの配色を変更するだけでは何の役にも立ちませんし、ピクセルの解像度も変更しません(デフォルトの解像度が高すぎる場合は、解像度を下げてピクセルを大きくする必要があります)。見た目を良くするためにデフォルトの配色を変更することもできますが、非常に差別化することを目的としています。

色を支援するためにできることは、スケールレベルを対数に変更することです(非常に不均一なプロセスがある場合にのみ実際に役立ちます)、カラーパレットを変更して、下端でより変化させます(カラーランプ仕様のバイアスR)、または連続ではなく個別のビンを持つように凡例を調整します。

ここから適応された凡例のバイアスの例と、ここの非常に簡単な例個別のビンの色付けを説明する別の投稿がGISサイトにあります。ただし、パターンが最初からスムージングされている場合は、これらは役に立ちません。

Z <- density(X, 0.1)
logZ <- eval.im(log(Z))
bias_palette <- colorRampPalette(c("blue", "magenta", "red", "yellow", "white"), bias=2, space="Lab")
norm_palette <- colorRampPalette(c("white","red"))
par(mfrow = c(2,2))
plot(Z)
plot(logZ)
plot(Z, col=bias_palette(256))
plot(Z, col=norm_palette(5))

ここに画像の説明を入力してください


最後の画像(最初のカラービンが白)で色を透明にするには、カラーランプを生成し、RGB仕様を透明色に置き換えるだけです。上記と同じデータを使用した以下の例。

library(spatstat)
set.seed(3)
X <- rpoispp(10)
Z <- density(X, 0.1)
A <- rpoispp(100) #points other places than density


norm_palette <- colorRampPalette(c("white","red"))
pal_opaque <- norm_palette(5)
pal_trans <- norm_palette(5)
pal_trans[1] <- "#FFFFFF00" #was originally "#FFFFFF" 

par(mfrow = c(1,3))
plot(A, Main = "Opaque Density")
plot(Z, add=T, col = pal_opaque)
plot(A, Main = "Transparent Density")
plot(Z, add=T, col = pal_trans)


pal_trans2 <- paste(pal_opaque,"50",sep = "")
plot(A, Main = "All slightly transparent")
plot(Z, add=T, col = pal_trans2)

ここに画像の説明を入力してください


ありがとう、非常にはっきりと答えた回答。これは、あなたが裏打ちした「spatstat.options(npixel = c(100,100))」コマンドと組み合わせてトリックを行いました。もっと気にすることができたら:「背景」色を透明にする方法を知っていますか?
フィガロ

1
@Figaro、色を半透明にする例を更新しました。
アンディW

ありがとうございました。もう一つ。これは少しトピックから外れているかもしれませんが、これらのヒートマップをシェイプファイルにエクスポートするにはどうすればよいですか?または、それらをラスターのみとして扱う必要がありますか?
フィガロ

私はそれをする必要がなかったので、私は素直に言うことはできません。おそらく、スタックオーバーフローに関するRの第一人者にとって良い質問です。
アンディW

ヒートマップをラスター以外のものとして表示できますか?
フィガロ

2

akimaパッケージのinterp関数の恩恵を受けることができます。これにより、必要に応じてマトリックスを別の解像度に補間できます。リンクされた例のようなものを作成するには、かなり細かいグリッドに補間する必要があります(おそらく、引数xoとyoの長さは約1000です)。これにより、image()でプロットできる新しいマトリックスが作成されます。透明性が必要な場合は、追加の作業が必要になります。カラーパレットを使用してこれを行うのは簡単ではないため、各グリッドを割り当てられた色のポリゴンとしてプロットしなければならない場合があります。


透明性を作成した経験はありますか?例はありますか?それが次のステップです。
フィガロ

interp()に必要なx、y、z値を作成するにはどうすればよいですか?たとえば、density()が100x100グリッドを使用する場合、各ポイントのz値はありますが、必要なベクトル形式のxとyはありません(車軸の座標しかありません)。
フィガロ

座標ペアを取得するためのループを作成しましたが、この機能はありますか?
フィガロ

2
結局のところ、画像は透明色を受け入れることができるように見えます。参照:menugget.blogspot.de/2012/04/…。引き続きinterpを使用する場合は、「grid <-expand.grid(x = x、y = y)」
ボックス内のマーク

1

ggplot2を調べてください。あなたが試したパッケージには素晴らしい配色や「フロー」がないようです-RColorBrewerを見てください。簡単な例でこれらのパッケージを実装したブログがあります。

リンクされた例に示されているように地理データをプロットしようとしているかどうかはわかりませんが、もしそうなら、Googleが「Static Maps API V2 Developer Guide」を提供していて、 提供し、RgoogleMapsと呼ばれるパッケージでGoogleとR組み合わせる

あなたの研究で頑張ってください。


よくわからない場合は申し訳ありませんが、現在の問題は配色そのものではありません。しかし、今日早くRColorBrewerを試してみました。すごい小さなパッケージです!それは空間データであり、Google APIを使用したいかはわかりませんが、見ているかもしれません。
フィガロ

0

解像度を上げてみましたdensityか?引数dimyx=c(512, 512)以上を試してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.