大多数未被充分利用的数据可视化

一个例子(最好是 R)。链接的图像将是 不错。 “ rel = “ noReferrer”> Google Code

26621 次浏览

顺便说一句我喜欢他的闪光数据可视化。惊喜吧!谷歌已经写好了,并发布在 谷歌代码

另一个值得了解的软件包是 Rggobi。这里有 关于这个问题的斯普林格著作,还有很多很棒的在线文档/示例,包括在 “看数据”课程中。

我真的同意其他海报: 塔夫特的书棒极了和非常值得一读。

在我看来,马赛克情节符合所提到的四个标准。

首先,我会在今年早些时候的“查看数据”中指出 一个非常好的 ggplot2和 ggobi 教程。除此之外,我还要强调一个来自 R 的可视化,以及两个图形包(它们没有像基础图形、格子或 ggplot 那样被广泛使用) :

这本书非常棒,非常值得一读

热点地图

首先,我会在今年早些时候的“查看数据”中指出 一个非常好的 ggplot2和 ggobi 教程。除此之外,我还要强调一个来自 R 的可视化,以及两个图形包(它们没有像基础图形、格子或 ggplot 那样被广泛使用) :

我真的很喜欢可视化,可以处理多元数据,特别是时间序列数据。热点地图对此很有用。一个非常整洁的是由 大卫 · 史密斯的革命博客的特色之一。下面是 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

交互式3D 图形

我真的很喜欢可视化,可以处理多元数据,特别是时间序列数据。热点地图对此很有用。一个非常整洁的是由 大卫 · 史密斯的革命博客的特色之一。下面是 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 图形的能力。在线有许多这方面的例子(包括在 rgl 文档中)。

交互式3D 图形

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

另一个非常值得学习的软件包是 RGL ,它很容易提供创建交互式3D 图形的能力。在线有许多这方面的例子(包括在 rgl 文档中)。

戈壁

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

戈壁

另一个值得了解的软件包是 Rggobi。这里有 关于这个问题的斯普林格著作,还有很多很棒的在线文档/示例,包括在 “看数据”课程中。

另一个值得了解的软件包是 Rggobi。这里有 关于这个问题的斯普林格著作,还有很多很棒的在线文档/示例,包括在 “看数据”课程中。

除了塔夫特的优秀作品,我推荐威廉 · 克利夫兰的书: 数据可视化图形数据元素。它们不仅非常优秀,而且都是用 R 语言完成的,我相信这些代码是公开可用的。

(请参阅英文版)

使用极坐标的地块肯定没有得到充分利用——有些人会说有充分的理由。我认为证明使用极坐标的情况并不常见; 我还认为,当这些情况出现时,极坐标可以揭示数据中的模式,而线性坐标则不能。

我认为这是因为有时候你的数据是 本质上极坐标,而不是线性的——例如,它是循环的(x 坐标表示一天24小时内多天的时间) ,或者数据之前被映射到一个极坐标空间。

我认为这是因为有时候你的数据是 本质上极坐标而不是线性的——例如,它是循环的(x 坐标表示一天24小时内多天的时间) ,或者数据之前被映射到一个极坐标空间。

举个例子。这张图显示了一个网站每小时的平均流量。注意晚上10点和凌晨1点的两个峰值。对于站点的网络工程师来说,这些是非常重要的; 它们彼此接近(仅仅相隔 小时)也是非常重要的。但是如果你在一个传统的坐标系上绘制相同的数据,这种模式将被完全隐藏起来——线性绘制,这两个峰值之间的距离将是 20小时,它们确实是这样,尽管它们在连续的日子里也只有两个小时的距离。上面的极图以一种简洁而直观的方式表明了这一点(传说是不必要的)。

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

举个例子。这张图显示了一个网站每小时的平均流量。注意晚上10点和凌晨1点的两个峰值。对于站点的网络工程师来说,这些是非常重要的; 它们彼此接近(仅仅相隔 小时)也是非常重要的。但是如果你在一个传统的坐标系上绘制相同的数据,这种模式将被完全隐藏起来——线性绘制,这两个峰值之间的距离将是 20小时,它们确实是这样,尽管它们在连续的日子里也只有两个小时的距离。上面的极图以一种简洁而直观的方式表明了这一点(传说是不必要的)。

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

有两种方法(我知道)可以使用 R 创建类似的图(我在 w/R 上面创建了图)。一种是在基础图形系统或网格图形系统中编写自己的函数。另一种更容易的方法是使用 圆形包装。你要使用的函数是‘ 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)

我认为这是因为有时候你的数据是 本质上极坐标而不是线性的——例如,它是循环的(x 坐标表示一天24小时内多天的时间) ,或者数据之前被映射到一个极坐标空间。

地平线图 (pdf) ,用于同时可视化多个时间序列。

举个例子。这张图显示了一个网站每小时的平均流量。注意晚上10点和凌晨1点的两个峰值。对于站点的网络工程师来说,这些是非常重要的; 它们彼此接近(仅仅相隔 小时)也是非常重要的。但是如果你在一个传统的坐标系上绘制相同的数据,这种模式将被完全隐藏起来——线性绘制,这两个峰值之间的距离将是 20小时,它们确实是这样,尽管它们在连续的日子里也只有两个小时的距离。上面的极图以一种简洁而直观的方式表明了这一点(传说是不必要的)。

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

平行坐标图 (pdf) ,供多变量分析参考。

有两种方法(我知道)可以使用 R 创建类似的图(我在 w/R 上面创建了图)。一种是在基础图形系统或网格图形系统中编写自己的函数。另一种更容易的方法是使用 圆形包装。你要使用的函数是‘ 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)

协会 马赛克图,用于可视化列联表(见 VCD软件包)

你可以阅读如何在 http://learnr.wordpress.com/上创建它,但它最终看起来是这样的:

alt text

对于更复杂的发行版,有一个名为 vioplot的扩展。

总结情节? 就像这页提到的:

总结情节? 就像这页提到的:

可视化概要统计与不确定性

可视化概要统计与不确定性

在下面的示例中(在 Excel 中完成!),您可以清楚地看到哪个类别可能受到标签交换的影响。

Dotplot with 2 groups

这是我用的。

其他制作这些(包括其他类型的塔夫特箱线)的方法是 在这个问题中讨论过

如果你的散点图有如此多的点,以至于它变得一团糟,试试平滑的散点图。这里有一个例子:

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

每月的第一天:

date('Y-m-01');

hexbin软件包(由@Dirk Eddelbuettel 建议)用于同样的目的,但是 smoothScatter()的优点是它属于 graphics软件包,因此是标准 R 安装的一部分。

Smiley as a regular or smoothed scatter plot

每月最后一天:

date('Y-m-t');

小提琴曲线 (将盒形曲线与核密度结合在一起)相对来说比较奇特,而且相当酷。使用 R 语言的 Vioplot软件包可以非常容易地制作它们。

下面是一个例子(维基百科的链接也显示了一个例子) :

enter image description here

使用 R 语言的 Vioplot软件包可以非常容易地制作它们。

下面是一个例子(维基百科的链接也显示了一个例子) :

enter image description here

我们不应该忘记可爱的(历史上)重要的茎叶情节(塔夫特也喜欢!).您可以直接获得数据密度和形状的数值概述(当然,如果您的数据集不超过200点)。在 R 中,函数 stem生成您的茎叶显示器(在工作空间中)。我喜欢使用 gstem的功能从包 联邦调查局直接绘制它在图形设备。下面是海狸体温变化(数据应该在你的默认数据集中)在一个茎叶显示:

  require(fmsb)
gstem(beaver1$temp)

enter image description here