質問

ヒストグラムと散布図は、データと変数間の関係を視覚化する優れた方法ですが、最近、どのような視覚化テクニックが不足しているのかと疑問に思っています。最も活用されていないタイプのプロットは何だと思いますか?

回答は次のとおりです。

  1. 実際にはあまり一般的に使用されていません。
  2. 多くのバックグラウンドディスカッションなしで理解できます。
  3. 多くの一般的な状況に適用できます。
  4. 再現可能なコードを含めて、例を作成します(できればRで)。リンクされた画像がいいでしょう。
役に立ちましたか?

解決

私は他の投稿者に本当に同意します: タフテさんの本は素晴らしいです そして読む価値があります。

まず、私があなたに指摘したいのは、 ggplot2 と ggobi に関する非常に素晴らしいチュートリアル 今年初めの「データを見る」より。さらに、R からの 1 つのビジュアライゼーションと 2 つのグラフィック パッケージ (基本グラフィック、ラティス、または ggplot ほど広く使用されていません) を強調表示します。

ヒートマップ

私は多変量データ、特に時系列データを処理できるビジュアライゼーションがとても好きです。 ヒートマップ これには役立ちます。本当に素晴らしいものが 1 つ紹介されました。 David Smith の Revolutions ブログ. 。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)

最終的には次のようになります。

alt text

RGL:インタラクティブな 3D グラフィックス

努力して学ぶ価値のあるもう 1 つのパッケージは次のとおりです。 RGL, 、インタラクティブな 3D グラフィックスを簡単に作成する機能を提供します。このための例がオンラインに多数あります (rgl ドキュメントを含む)。

R-Wiki に良い例があります rgl を使用して 3D 散布図をプロットする方法について説明します。

ゴビ

知っておく価値のあるもう 1 つのパッケージは、 ルゴビ. 。がある このテーマに関するシュプリンガーの本, 、オンライン上には多くの優れたドキュメント/サンプルが含まれています。 「データを見る」 コース。

他のヒント

本当に好きです ドットプロット そして、適切なデータの問題について他の人に勧めると、彼らはいつも驚き、喜んでくれることに気づきました。あまり役に立たないようですが、その理由がわかりません。

Quick-R の例を次に示します。dotplot on car data

私は、クリーブランドがこれらの開発と普及に最も責任があると信じています。彼の本の中の例 (欠陥のあるデータがドットプロットで簡単に検出された) は、それらの使用に対する強力な議論です。上の例では 1 行に 1 つのドットしか配置していませんが、実際の威力は各行に複数のドットがあり、どれがどれであるかを説明する凡例があることに注意してください。たとえば、3 つの異なる時点に異なる記号や色を使用すると、さまざまなカテゴリの時間パターンの感覚を簡単に得ることができます。

次の例 (すべて Excel で実行されています!) では、ラベルの交換によってどのカテゴリが影響を受けたのかが明確にわかります。

Dotplot with 2 groups

極座標を使用したプロットは確かに十分に活用されていません。正当な理由があると言う人もいます。それらの使用が正当化される状況は一般的ではないと思います。また、そのような状況が発生した場合、極座標プロットは線形プロットではできないデータのパターンを明らかにできると思います。

それは、データが時々壊れているからだと思います 本質的に 線形ではなく極性です。たとえば、周期的 (複数日にわたる 1 日 24 時間の時間を表す x 座標) であるか、データが事前に極性特徴空間にマッピングされています。

ここに例を示します。このプロットは、Web サイトの時間別の平均トラフィック量を示しています。午後 10 時と午前 1 時の 2 つのスパイクに注目してください。サイトのネットワーク エンジニアにとって、これらは重要です。それらが互いに近くで発生することも重要です(単に 時間差)。しかし、同じデータを従来の座標系でプロットすると、このパターンは完全に隠蔽されます。直線的にプロットすると、これら 2 つのスパイクは次のようになります。 20 時間差はありますが、連続する日ではわずか 2 時間の差もあります。上の極図は、これを倹約的かつ直観的な方法で示しています (凡例は必要ありません)。

Polar chart showing site traffic, with peaks at hours 1 and 22

R を使用してこのようなプロットを作成するには (私が知っている限り) 2 つの方法があります (上記のプロットは R を使用して作成しました)。1 つは、ベース グラフィック システムまたはグリッド グラフィック システムで独自の関数をコーディングすることです。より簡単な別の方法は、 円形パッケージ. 。使用する関数は 'ローズダイアグ':

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 インストールの一部です。

Smiley as a regular or smoothed scatter plot

スパークラインやその他のタフテのアイデアに関しては、 エールツールキット パッケージオン クラン 機能を提供します sparkline そして sparklines.

大規模なデータセットに役立つもう 1 つのパッケージは次のとおりです。 ヘクスビン 単純な散布図には大きすぎる可能性のあるデータセットを処理するために、データをバケットに賢く「ビン化」します。

ヴァイオリンプロット (箱ひげ図とカーネル密度を組み合わせたもの) は比較的エキゾチックで、かなりクールです。の ヴァイオプロット R のパッケージを使用すると、非常に簡単に作成できます。

以下に例を示します (ウィキペディアのリンクにも例が示されています)。

enter image description here

私がレビューしていたもう 1 つの優れた時系列視覚化は次のとおりです。 「バンプチャート」 (で紹介されているように) 「Learning R」ブログのこの投稿)。これは、時間の経過に伴う位置の変化を視覚化するのに非常に役立ちます。

作成方法については、 http://learnr.wordpress.com/, しかし、最終的には次のようになります。

alt text

また、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
  )

compareplot

これらを作成する他の方法 (他の種類のタフテ箱ひげ図を含む) は次のとおりです。 この質問で議論された.

ホライズングラフ (pdf)、一度に多くの時系列を視覚化します。

平行座標プロット (pdf)、多変量解析用。

協会 そして モザイク 分割表を視覚化するためのプロット ( ビデオCD パッケージ)

可愛くて(歴史的に)重要な茎と葉のプロット(タフテも大好きです!)を忘れてはなりません。データ密度と形状の直接的な数値概要が得られます (もちろん、データ セットが約 200 ポイントより大きくない場合)。R では、関数は stem (ワークスペース内に) 幹と葉の表示が作成されます。使用することを好みます gstem パッケージからの機能 fmsb グラフィックデバイスに直接描画します。以下は、茎ごとに表示したビーバーの体温の分散です (データはデフォルトのデータセットにある必要があります)。

  require(fmsb)
  gstem(beaver1$temp)

enter image description here

タフティの優れた著作に加えて、ウィリアム S.クリーブランド: データの視覚化 そしてその グラフ化データの要素. 。これらは優れているだけでなく、すべて R で実行されており、コードは公開されていると思います。

箱ひげ図!R ヘルプの例:

boxplot(count ~ spray, data = InsectSprays, col = "lightgray")

私の考えでは、これはデータをざっと確認したり、分布を比較したりするのに最も便利な方法です。より複雑なディストリビューションには、と呼ばれる拡張機能があります。 vioplot.

モザイク プロットは、前述の 4 つの基準をすべて満たしているように思えます。r の mosaicplot の下に例があります。

エドワード・タフティの作品、特に この本

試しに捕まえることもできます 彼の旅行プレゼンテーション. 。これは非常に優れており、彼の本が 4 冊セットになっています。(私は彼の出版社の株式を所有していないことを誓います!)

ちなみに、私は彼のスパークライン データ視覚化テクニックが好きです。驚き!Googleはすでにそれを作成し、公開しています Googleコード

要約プロット?このページで述べたように:

要約統計量と不確実性の視覚化

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top