ヒストグラムと散布図は、データと変数間の関係を視覚化する優れた方法ですが、最近、どの視覚化手法が欠けているのか疑問に思っています。最も活用されていないタイプのプロットは何だと思いますか?
回答は次のとおりです。
- 実際にはあまり一般的に使用されません。
- 背景についてあまり議論しなくても理解できるようにします。
- 多くの一般的な状況に適用できます。
- 再現可能なコードを含めて例を作成します (できれば R で)。リンクされた画像がいいでしょう。
ヒストグラムと散布図は、データと変数間の関係を視覚化する優れた方法ですが、最近、どの視覚化手法が欠けているのか疑問に思っています。最も活用されていないタイプのプロットは何だと思いますか?
回答は次のとおりです。
私は他のポスターに本当に同意します.Tufteの本は素晴らしく、読む価値があります.
まず、今年初めの「Looking at Data」のggplot2 と ggobi に関する非常に優れたチュートリアルを紹介します。それを超えて、R からの 1 つの視覚化と 2 つのグラフィックス パッケージ (ベース グラフィックス、ラティス、または ggplot ほど広く使用されていません) を強調します。
ヒートマップ
多変量データ、特に時系列データを処理できるビジュアライゼーションが本当に好きです。 これには、ヒート マップが役立ちます。Revolutions ブログで、David Smithが取り上げた非常に優れたものがあります。Hadley の好意による ggplot コードは次のとおりです。
stock <- "MSFT"
start.date <- "2006-01-12"
end.date <- Sys.Date()
quote <- paste("http://ichart.finance.yahoo.com/table.csv?s=",
stock, "&a=", substr(start.date,6,7),
"&b=", substr(start.date, 9, 10),
"&c=", substr(start.date, 1,4),
"&d=", substr(end.date,6,7),
"&e=", substr(end.date, 9, 10),
"&f=", substr(end.date, 1,4),
"&g=d&ignore=.csv", sep="")
stock.data <- read.csv(quote, as.is=TRUE)
stock.data <- transform(stock.data,
week = as.POSIXlt(Date)$yday %/% 7 + 1,
wday = as.POSIXlt(Date)$wday,
year = as.POSIXlt(Date)$year + 1900)
library(ggplot2)
ggplot(stock.data, aes(week, wday, fill = Adj.Close)) +
geom_tile(colour = "white") +
scale_fill_gradientn(colours = c("#D61818","#FFAE63","#FFFFBD","#B5E384")) +
facet_wrap(~ year, ncol = 1)
最終的には次のようになります。
RGL: インタラクティブ 3D グラフィックス
学ぶ価値のあるもう 1 つのパッケージはRGLで、インタラクティブな 3D グラフィックスを簡単に作成できます。これについてはオンラインで多くの例があります (rgl のドキュメントを含む)。
R-Wiki には、 rgl を使用して 3D 散布図をプロットする方法の良い例があります。
グゴビ
知っておく価値のある別のパッケージはrggobiです。このテーマに関する Springer の本と、 「Looking at Data」コースを含め、多くの優れたドキュメント/例がオンラインにあります。
私は dotplots が本当に好きで、適切なデータの問題について他の人にdotplotsを勧めると、彼らはいつも驚き、喜んでくれます。それらはあまり使用されていないようで、その理由がわかりません。
Quick-R の例を次に示します。
私はクリーブランドがこれらの開発と普及に最も責任があると信じており、彼の本の例 (欠陥のあるデータがドットプロットで簡単に検出された) は、それらの使用に対する強力な議論です。上記の例では、1 行に 1 つのドットしか配置されていませんが、その真の力は、各行に複数のドットがあり、どれがどれであるかを説明する凡例があることに注意してください。たとえば、3 つの異なる時点に異なる記号や色を使用すると、さまざまなカテゴリの時間パターンを簡単に把握できます。
次の例 (すべて Excel で作成されています!) では、どのカテゴリがラベル スワップの影響を受けた可能性があるかを明確に確認できます。
極座標を使用したプロットは、確かに十分に活用されていません。正当な理由があると言う人もいます。それらの使用を正当化する状況は一般的ではないと思います。また、そのような状況が発生した場合、極座標プロットは、線形プロットではできないデータのパターンを明らかにできると思います。
これは、データが線形ではなく本質的に極である場合があるためだと思います。たとえば、周期的 (1 日 24 時間の時間を複数日にわたって表す x 座標) であったり、データが以前に極フィーチャ空間にマッピングされていたりします。
これが例です。このプロットは、時間ごとの Web サイトの平均トラフィック量を示しています。午後 10 時と午前 1 時の 2 つのスパイクに注目してください。サイトのネットワーク エンジニアにとって、これらは重要です。また、それらが互いに近くに発生することも重要です (わずか2時間の間隔)。しかし、従来の座標系で同じデータをプロットすると、このパターンは完全に隠されます。直線的にプロットすると、これら 2 つのスパイクは20時間間隔で表示されますが、連続した日でも 2 時間間隔で表示されます。上の極座標チャートは、これを簡潔かつ直感的な方法で示しています (凡例は必要ありません)。
Rを使用してこのようなプロットを作成するには(私が知っている)2つの方法があります(上記のプロットはRで作成しました)。1 つは、ベース グラフィック システムまたはグリッド グラフィック システムで独自の関数をコーディングすることです。より簡単な別の方法は、循環パッケージを使用することです。使用する関数は「rose.diag」です。
data = c(35, 78, 34, 25, 21, 17, 22, 19, 25, 18, 25, 21, 16, 20, 26,
19, 24, 18, 23, 25, 24, 25, 71, 27)
three_palettes = c(brewer.pal(12, "Set3"), brewer.pal(8, "Accent"),
brewer.pal(9, "Set1"))
rose.diag(data, bins=24, main="Daily Site Traffic by Hour", col=three_palettes)
散布図に非常に多くのポイントがあり、完全に混乱している場合は、平滑化された散布図を試してください。次に例を示します。
library(mlbench) ## this package has a smiley function
n <- 1e5 ## number of points
p <- mlbench.smiley(n,sd1 = 0.4, sd2 = 0.4) ## make a smiley :-)
x <- p$x[,1]; y <- p$x[,2]
par(mfrow = c(1,2)) ## plot side by side
plot(x,y) ## left plot, regular scatter plot
smoothScatter(x,y) ## right plot, smoothed scatter plot
hexbin
パッケージ (@Dirk Eddelbuettel が提案) は同じ目的で使用されますが、パッケージsmoothScatter()
に属しているためgraphics
、標準の R インストールの一部であるという利点があります。
スパークラインやその他の Tufte のアイデアについては、CRANのYaleToolkitパッケージが関数と. sparkline
sparklines
大規模なデータセットに役立つもう 1 つのパッケージは、単純な散布図には大きすぎる可能性があるデータセットを処理するために、巧妙にデータをバケットに「ビン化」するhexbinです。
ヴァイオリン プロット(ボックス プロットとカーネル密度を組み合わせたもの) は、比較的風変わりでかなりクールです。Rのvioplotパッケージを使用すると、非常に簡単に作成できます。
以下に例を示します (ウィキペディアのリンクにも例が示されています)。
私がちょうどレビューしていたもう 1 つの優れた時系列の視覚化は、「バンプ チャート」です ( 「Learning R」ブログのこの投稿で紹介されているように)。これは、経時的な位置の変化を視覚化するのに非常に役立ちます。
作成方法についてはhttp://learnr.wordpress.com/で読むことができますが、最終的には次のようになります。
また、タフテの箱ひげ図の修正も気に入っています。これにより、小さな倍数比較をはるかに簡単に行うことができます。これは、水平方向に非常に「薄く」、余分なインクでプロットが乱雑にならないためです。ただし、かなり多数のカテゴリで最適に機能します。プロットにいくつかしかない場合は、通常の (Tukey) ボックスプロットの方が見栄えがよくなります。
library(lattice)
library(taRifx)
compareplot(~weight | Diet * Time * Chick,
data.frame=cw ,
main = "Chick Weights",
box.show.mean=FALSE,
box.show.whiskers=FALSE,
box.show.box=FALSE
)
これらを作成する他の方法 (他の種類の Tufte boxplot を含む)については、この質問で説明します。
キュートで (歴史的に) 重要な幹葉図 (Tufte も大好き!) を忘れてはなりません。データの密度と形状の直接的な数値の概要が得られます (もちろん、データ セットが約 200 ポイントより大きくない場合)。R では、関数stem
は (ワークスペースで) 幹葉表示を生成します。gstem
パッケージfmsbの関数を使用して、グラフィック デバイスに直接描画することを好みます。以下は、幹ごとに表示されたビーバーの体温の分散です (データはデフォルトのデータセットにある必要があります)。
require(fmsb)
gstem(beaver1$temp)
Tufte の優れた業績に加えて、William S. Cleveland の本: Visualizing Dataと The Elements of Graphing Dataをお勧めします。それらは優れているだけでなく、すべて R で作成されており、コードは公開されていると思います。
ボックスプロット!R ヘルプの例:
boxplot(count ~ spray, data = InsectSprays, col = "lightgray")
私の意見では、データをざっと見たり、分布を比較したりするのに最も便利な方法です。より複雑なディストリビューションには、 と呼ばれる拡張機能がありvioplot
ます。
モザイク プロットは、前述の 4 つの基準をすべて満たしているように思えます。rのmosaicplotの下に例があります。
Edward Tufte の作品、特にこの本をチェックしてください
また、彼の出張プレゼンテーションを視聴することもできます。とても良くて、彼の本が 4 冊入っています。(私は彼の出版社の株式を所有していないと誓います!)
ところで、私は彼のスパークライン データ視覚化手法が気に入っています。サプライズ!Google はすでにそれを作成し、Google Codeに公開しています
要約プロット?このページで述べたように: