データのお砂場(153) R言語、faithfuld、間欠泉の2D密度?{ggplot2}

Joseph Halfmoon

今回は「見たことのある」データセットです。でもデジャブではないです。faithfuldとな。過去回にてfaithfulというデータセットあり。違いは末尾の「d」という文字のみ。どちらもイエローストーンの大間欠泉、オールドフェイスフルに関するもの。「同じ」データを扱っているのだけれども見せ方の違いで構成が違うみたいです。

※「データのお砂場」投稿順Indexはこちら

※使用させていただいている Rのversionは 4.3.1。RStudioは 2024.04.2+764 “Chocolate Cosmos” です。

オールド・フェイスフル

かの大間欠泉、オールド・フェイスフルについては以下の回で既にとりあげさせていただいとります。

データのお砂場(55) R言語、faithful、間欠泉(イエローストーン)の噴出時間とな

上記に書かせていただきましたが、1度だけ「参観」したことあり。その雄大な規模に圧倒されました(待ち時間、結構長かったケド。)日本でも「間欠泉」と称する観光地に数か所行ったことがあるのです。露天風呂のアトラクションかという感じであったのに比べるとレベチ。

ブツクサ言うのは止めにしてデータです。基本的には faithful と faithfuld ともに噴出継続時間と噴出までの待ち時間のデータです。ただし faithful が数百点しかないデータであったのに対し、faithfuld は5千点を超えるデータです。また「補助的な役割」のデータですが、2d density estimate という変数も追加されています。

上記の過去記事で既に見ていますが、待ち時間が長いほど噴出継続時間が長くなる傾向がハッキリしてます。さらに、待ち時間が短くて継続時間も短い群と、待ち時間が長くて継続時間の長い群の2つにわかれる傾向に見えました。

今回の faithfuld サンプルデータセットの解説ページは以下に。

2d density estimate of Old Faithful data

2d density plot

さて今回のサンプルデータセットは、ggplot2パッケージの処理例向けの登場です。プロット向けですが、まずは生データのロードから。

faithfuldRawData

今回の処理テーマは「2次元密度プロット」であるようです。その解説ページが以下に。

2d density plot with ggplot2

密度プロットの威力をシミジミ味わう前に、密度プロットしないときのデータの様子を確かめておきたいと思います。処理はこんな感じ。

v0 <- ggplot(faithful, aes(waiting, eruptions))
v0 + geom_point()

結果が以下に。geom_point

上記は5625点もあるデータを「点」でプロットしておるわけですが、点が重なってしまってそのデータの分厚さが伝わってこない感じっす(個人の感想デス。)

そのために第3の変数としてdensityという項目がふくまれとります。この項目をどうやって求めたのかは解説には書いてません。しかし、

geom_density_2d()

という関数を使えば、生データからでも「それらしき密度」を求めることが可能であるようです。1行追加、こんな感じ。

v0 + geom_density_2d()

上記の結果、以下が得られます。geom_density_2d

確かにこんな感じがしないでもない。

しかし、サンプル・データの方にも density変数ありです。そちらを使うと、

v <- ggplot(faithfuld, aes(waiting, eruptions, z = density))
v + geom_contour()

プロットはこんな感じ。counter00

以降はサンプル・データの density変数で処理例どおりに処理していきたいと思います。

まずは「等高線」の間を色でフィルしてみます。

v + geom_contour_filled()

結果が以下に。地図とはちょっと色合いが違うけれども。counter01

グラディエーションと等高線を別々に制御したければ以下のような感じ。

v + geom_raster(aes(fill = density)) + geom_contour(colour = "white")

結果は以下です。counter02

一方、密度によって「色変」したタイル(ヒートマップ的な)で描く場合が以下に。

v1 <- ggplot(faithfuld) + geom_tile(aes(waiting, eruptions, fill = density))
v1 + scale_fill_distiller(palette = "Spectral")

なんかいい感じでないかい。counter03

「密度を計算」すればご所望の図形が描けそうな気がしてきた。ホントか?

データのお砂場(152) R言語、economics、米国の経済指標データ{ggplot2}へ戻る