ヒストグラムと散布図は、データと変数間の関係を視覚化する優れた方法ですが、最近、どの視覚化手法が足りないのか疑問に思っています。最も活用されていないタイプのプロットは何だと思いますか?
答えは:
- 実際にはあまり使用されません。
- バックグラウンドでの多くの議論なしに理解できる。
- 多くの一般的な状況に適用できます。
- 例を作成するために再現可能なコードを含めます(できればRで)。リンクされた画像がいいでしょう。
ヒストグラムと散布図は、データと変数間の関係を視覚化する優れた方法ですが、最近、どの視覚化手法が足りないのか疑問に思っています。最も活用されていないタイプのプロットは何だと思いますか?
答えは:
回答:
私は他のポスターに本当に同意します:Tufteの本は素晴らしく、読む価値があります。
最初に、今年初めの "Looking at Data"のggplot2とggobiに関する非常に優れたチュートリアルを紹介します。さらに、Rからの1つの視覚化と2つのグラフィックパッケージ(ベースグラフィック、ラティス、またはggplotほど広くは使用されていません)を強調表示します。
ヒートマップ
多変量データ、特に時系列データを処理できる視覚化が本当に好きです。 これにはヒートマップが役立ちます。本当にきちんとした1つは、革命のブログでデビッド・スミスによって紹介されました。これは、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散布図をプロットする方法の良い例があります。
GGobi
知っておく価値のあるもう1つのパッケージはrggobiです。このテーマに関するSpringerの本と、「Looking at Data」コースを含む多くの優れたドキュメント/例がオンラインにあります。
私は本当にドットプロットが好きで、適切なデータ問題のために他の人にそれらを勧めると、いつも驚かれ、喜んでいます。それらはあまり使われていないようで、私にはその理由がわかりません。
以下は、Quick-Rの例です。
私はクリーブランドがこれらの開発と普及に最も責任があると思います、そして彼の本の例(欠陥のあるデータがドットプロットで簡単に検出された)はそれらの使用に対する強力な議論です。上記の例では、1行に1つのドットしか配置していませんが、実際の力は各行に複数のドットがあり、どちらがどれかを説明する凡例が付いていることに注意してください。たとえば、3つの異なる時点に異なる記号や色を使用すると、さまざまなカテゴリの時間パターンを簡単に把握できます。
次の例(Excelですべてのことを行います)では、ラベルの入れ替えの影響を受けた可能性のあるカテゴリを明確に確認できます。
極座標を使用するプロットは確かに十分に活用されていません-正当な理由で言う人もいます。私はそれらの使用を正当化する状況は一般的ではないと思います。また、これらの状況が発生した場合、極座標プロットはデータのパターンを明らかにすることができ、線形プロットでは明らかにできないと思います。
それは、データが線形ではなく本質的に極性である場合があるためだと思います-たとえば、周期的(24時間の1日の時間を複数の日で表す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)
qplot(y=data, x=1:length(data), fill=factor(1:length(data)), stat='identity', geom='bar') + coord_polar()
散布図に非常に多くの点があり、完全に混乱する場合は、平滑化された散布図を試してください。次に例を示します。
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
。
大きなデータセットに役立つ別のパッケージはhexbinです。これは、データをバケットに巧みに「ビン」して、単純な散布図には大きすぎる可能性のあるデータセットを処理するためです。
Hmisc::latex()
からの出力のバージョンにHmisc::describe
は、テーブルに含まれるミニヒストグラムが含まれます。
バイオリンプロット(ボックスプロットとカーネル密度を組み合わせたもの)は比較的エキゾチックで、かなりクールです。R のvioplotパッケージを使用すると、かなり簡単に作成できます。
次に例を示します(ウィキペディアのリンクにも例が表示されています)。
bwplot(... panel = panel.violin)
私がレビューしていたもう1つの素晴らしい時系列視覚化は、「バンプチャート」です(「Learning R」ブログのこの投稿で特集されています)。これは、時間の経過に伴う位置の変化を視覚化するのに非常に役立ちます。
作成方法についてはhttp://learnr.wordpress.com/で読むことができますが、最終的には次のようになります。
Tufteによるボックスプロットの変更も気に入っています。これは、横方向に非常に「薄く」なり、冗長なインクでプロットが乱雑にならないため、小さな多重比較をはるかに簡単に行えるようにします。ただし、かなり多数のカテゴリで最適に機能します。プロットの数が少ない場合、通常の(テューキー)箱ひげは少し重めなので、見栄えがよくなります。
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ボックスプロットを含む)については、この質問で説明します。
キュートで(歴史的に)重要な茎と葉のプロット(Tufteも大好きです!)を忘れないでください。データ密度と形状を直接数値で概観できます(もちろん、データセットが約200ポイントを超えない場合)。Rでは、この関数stem
は(ワークスペース内の)茎葉の表示を生成します。私gstem
はパッケージfmsbの関数を使用してグラフィックデバイスに直接描画することを好みます。以下は、葉ごとの表示におけるビーバーの体温の変化です(データはデフォルトのデータセットにあるはずです)。
require(fmsb)
gstem(beaver1$temp)
ボックスプロット!Rヘルプの例:
boxplot(count ~ spray, data = InsectSprays, col = "lightgray")
私の意見では、データをすばやく確認したり、分布を比較したりするのに最も便利な方法です。より複雑なディストリビューションにはと呼ばれる拡張がありvioplot
ます。
Edward Tufteの作品、特にこの本をチェックしてください。
彼の旅行のプレゼンテーションを試してみることもできますます。それは非常に優れており、彼の4冊の本のバンドルが含まれています。(私は彼の出版社の株式を所有していないと誓います!)
ちなみに、彼のスパークラインデータの視覚化手法が好きです。驚き!グーグルはすでにそれを書いてグーグルコードに載せている