大部分使用不足的数据可视化

直方图和散点图是数据可视化和variables之间关系的很好的方法,但是最近我一直在想我缺less的可视化技术。 你认为什么是最被滥用的情节types?

答案应该是:

  1. 在实践中不常用。
  2. 没有很多背景讨论就可以理解。
  3. 适用于许多常见的情况。
  4. 包括可重复的代码来创build一个例子(最好在R中)。 链接的图像会很好。

我非常同意其他的海报: Tufte的书很棒 ,值得一读。

首先,我会在今年早些时候向你指出一个关于ggplot2和ggobi的“看数据” 的非常好的教程 。 除此之外,我只会强调R的一个可视化和两个graphics包(不像基本graphics,点阵或ggplot那样广泛使用):

热图

我非常喜欢可以处理多元数据的可视化,尤其是时间序列数据。 热图可以用于此。 大卫·史密斯 ( 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) 

最后看起来有点像这样:

替代文字

RGL:交互式3Dgraphics

另一个非常值得学习的软件包是RGL ,它很容易提供创build交互式3Dgraphics的能力。 网上有很多例子(包括在rgl文档中)。

R-Wiki有一个很好的例子 ,说明如何使用rgl绘制三维散点图。

GGobi

另一个值得了解的软件包是rggobi 。 有一本关于这个主题的Springer书 ,还有很多很棒的文档/例子,包括在“查看数据”课程。

使用极坐标的地块当然没有得到充分利用 – 有些人会说很有道理。 我认为合理使用这种情况并不普遍, 我也认为,当这些情况出现时,极地地块可以揭示线性地块无法做到的数据模式。

我认为这是因为有时你的数据本质上是极性的而不是线性的,例如它是周期性的(x坐标代表多天的24小时内的时间),或者数据先前映射到极性特征空间。

这是一个例子。 这个图显示了一个网站的小时平均stream量。 注意下午10点和凌晨1点的两个尖峰。 对于本网站的networking工程师来说,这些都是重要的。 彼此之间彼此靠近也是相当重要的(相隔两个小时)。 但是,如果在传统的坐标系统上绘制相同的数据,这种模式将被完全隐藏 – 线性绘制,这两个尖峰将相隔20小时,尽pipe它们连续几天也相隔两个小时。 上面的极坐标图以简洁直观的方式显示了这一点(不需要图例)。

显示网站流量的极坐标图,在1时和22时高峰

有两种方法(我知道)使用R创build这样的情节(我创build了W / R以上的情节)。 一种是在基本或网格graphics系统中编写自己的function。 换句话说,更简单的是使用圆形包装 。 你使用的function是' 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的一个例子: 汽车数据上的dotplot

我相信克利夫兰对这些的发展和颁布负有最大的责任,他的书中的例子(其中有错误的数据很容易通过点阵来检测)是一个有用的论据。 请注意,上面的例子中,每行只放一个点,而它们的实际功率随着每行的多个点而变化,而图解说明哪一个是哪一个。 例如,您可以在三个不同的时间点使用不同的符号或颜色,从而轻松地获得不同类别的时间模式感。

在下面的例子中(用Excel做的所有事情!),你可以清楚地看到哪个类别可能遭受了标签交换。

与2组的Dotplot

如果你的散点图有很多点,那么它就变成了一个完整的混乱点,请尝试一个平滑的散点图。 这里是一个例子:

 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安装的一部分。

作为规则或平滑散点图的笑脸

关于Sparkline和其他Tufte的想法, CRAN上的YaleToolkit包提供函数sparklinesparklines

另一个对大数据集很有用的软件包是hexbin,因为它巧妙地将数据“桶”(bin)存储到桶中,以处理可能太大以至于幼稚的散点图的数据集。

小提琴情节 (与盒密度结合的盒子情节)是相对异乎寻常和非常凉快的。 R中的vioplot软件包可以让你很容易地做到这一点。

下面是一个例子(wikipedia链接也显示了一个例子):

在这里输入图像说明

我刚刚回顾的另一个很好的时间序列可视化就是“凹凸图” ( 在“学习R”博客上的这篇文章中已经提到)。 这对于随时间变化的位置可视化非常有用。

你可以阅读关于如何在http://learnr.wordpress.com/上创build它,但这是最终的样子:;

替代文字

我也喜欢Tufte对boxplots的修改,让你可以更容易地进行小倍数比较,因为它们是非常“薄”的水平,而不会让冗余墨水混乱的情节。 但是,对于相当多的类别来说,它效果最好; 如果你只在剧情上有一些,那么经常(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

在这个问题中讨论了其他方法(包括另一种Tufte boxplot)。

地平线图 (pdf),一次可视化多个时间序列。

平行坐标图 (pdf),用于多variables分析。

协会和马赛克图,用于可视化列联表(见vcd包)

我们不应该忘记可爱和(历史上)重要的干叶情节(Tufte也是这样)。 您可以直接对数据密度和形状进行数字概述(当然,如果数据集不大于200点)。 在R中,函数stem产生你的干叶(工作区)。 我更喜欢使用包fmsb中的 gstem函数直接在graphics设备中绘制它。 以下是逐个显示的海狸体温差异(数据应该在您的默认数据集中):

  require(fmsb) gstem(beaver1$temp) 

在这里输入图像说明

除了Tufte的出色工作之外,我还推荐William S. Cleveland的书籍: 可视化数据graphics数据元素 。 它们不仅非常出色,而且都是在R中完成的,我相信代码是公开的。

盒形图! R帮助中的示例:

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

在我看来,这是查看数据或比较分布的最方便的方法。 对于更复杂的分布,有一个名为vioplot的扩展。

马赛克情节似乎符合所有提到的四个标准。 在马赛克图下有r个例子。

看看Edward Tufte的作品,特别是这本书

您也可以尝试抓住他的旅行介绍 。 这是相当不错的,包括他的四本书。 (我发誓我不拥有他的出版商的股票!)

顺便说一句,我喜欢他的sparkline数据可视化技术。 惊喜! 谷歌已经写好了,并把它放在Google Code上

摘要图? 就像这个页面提到的那样:

可视化汇总统计和不确定性