ヒストグラムと散布図は、データと変数間の関係を視覚化する優れた方法ですが、最近、どの視覚化手法が欠けているのか疑問に思っています。最も利用されていないタイプのプロットは何だと思いますか?
答えは次のとおりです。
私は他のポスターに本当に同意します: Tufteの本は素晴らしいです そして読む価値があります。
最初に、 ggplot2とggobiに関する非常に素晴らしいチュートリアル を今年の初めに「Looking at Data」から紹介します。それを超えて、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グラフィックス
学ぶために努力する価値のある別のパッケージは [〜#〜] rgl [〜#〜] で、これは簡単にインタラクティブな3Dグラフィックスを作成する機能を提供します。これにはオンラインで多くの例があります(rglのドキュメントを含む)。
R-Wikiには素敵な例があります rglを使用して3D散布図をプロットする方法。
GGobi
知っておく価値のある別のパッケージは rggobi です。 主題に関するSpringerの本 と、 "Looking at Data" コースを含む多くの素晴らしいドキュメント/例がオンラインにあります。
極座標を使用したプロットは確かに十分に使用されていません-正当な理由で言う人もいます。それらの使用を正当化する状況は一般的ではないと思います。また、これらの状況が発生すると、極座標プロットは線形プロットではできないデータのパターンを明らかにできると思います。
なぜならあなたのデータは線形ではなく本質的に極であることがあるからだと思います-例えば、それは周期的ですまたは、データが以前に極地空間にマッピングされていました。
以下に例を示します。このプロットは、Webサイトの平均トラフィック量を1時間ごとに示しています。午後10時と午前1時の2つのスパイクに注目してください。サイトのネットワークエンジニアにとって、これらは重要です。また、それらが互いに近くで発生することも重要です(ちょうど2時間間隔)。ただし、同じデータを従来の座標系にプロットすると、このパターンは完全に隠されます-線形にプロットされ、これらの2つのスパイクは2時間間隔になりますが、これらも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)
dotplots が本当に好きで、適切なデータの問題のために他の人に勧めると、彼らは常に驚いて喜んでいます。彼らはあまり利用されていないようで、その理由はわかりません。
Quick-Rの例を次に示します。
私は、クリーブランドがこれらの開発と公布に最も責任があると信じており、彼の本の例(不完全なデータがドットプロットで簡単に検出された)は、それらを使用するための強力な議論です。上記の例では、1行に1つのドットのみを配置していますが、実際のパワーは各行に複数のドットがあり、どのドットがどちらであるかを説明しています。たとえば、3つの異なる時点で異なるシンボルまたは色を使用できます。これにより、さまざまなカテゴリの時間パターンを簡単に把握できます。
次の例(すべてExcelで行われています!)では、ラベルスワップの影響を受けた可能性のあるカテゴリを明確に確認できます。
散布図に非常に多くの点があるため、完全に混乱する場合は、平滑化された散布図を試してください。以下に例を示します。
_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 です。これは、データをバケットに巧妙に「ビン」化して、単純な散布図には大きすぎるデータセットを処理するためです。
私がちょうどレビューしていた別の素敵な時系列の視覚化は、 "バンプチャート" ( 「Learning R」ブログのこの投稿 )で紹介されています)です。これは、経時的な位置の変化を視覚化するのに非常に便利です。
http://learnr.wordpress.com/ で作成する方法について読むことができますが、これは最終的に次のようになります。
Tufteのボックスプロットの修正も気に入っています。小さな倍数比較は、水平方向に非常に「薄く」、余分なインクでプロットが乱雑にならないため、はるかに簡単に実行できます。ただし、かなり多数のカテゴリで最適に機能します。プロットに数個しかない場合、通常の(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
は(ワークスペースで)茎葉のレイアウトを生成します。パッケージ fmsb のgstem
関数を使用して、グラフィックデバイスに直接描画することを好みます。以下は、葉ごとの表示におけるビーバーの体温の変化です(データはデフォルトのデータセットにある必要があります)。
require(fmsb)
gstem(beaver1$temp)
Horizonグラフ (pdf)、多数の時系列を一度に視覚化するため。
平行座標プロット (pdf)、多変量解析用。
Association および mosaic プロット、分割表( vcd パッケージを参照)
Tufteの優れた作品に加えて、William S. Clevelandの本Visualizing DataとThe Elements of Graphing Dataをお勧めします。それらは優れているだけでなく、すべてRで実行されており、コードは公開されていると思います。
ボックスプロット! Rヘルプの例:
boxplot(count ~ spray, data = InsectSprays, col = "lightgray")
私の意見では、データをすばやく確認したり、分布を比較したりするのに最も便利な方法です。より複雑なディストリビューションには、vioplot
と呼ばれる拡張機能があります。
モザイクプロットは、上記の4つの基準すべてを満たすように思えます。 rには、モザイクプロットの下に例があります。
エドワード・タフテの作品、特に この本 をご覧ください
彼の旅行プレゼンテーション を試すこともできます。それは非常に優れており、彼の4冊の本が含まれています。 (私は彼の出版社の株式を所有していないことを誓います!)
ところで、私は彼のスパークラインデータの視覚化手法が好きです。驚き! Googleはすでにそれを書いて、それを Google Code
要約プロット?このページで言及したように: