最缺乏使用的数据可视化

时间:2010-01-16 06:03:53

标签: graphics r visualization plot ggplot2

直方图和散点图是可视化数据和变量之间关系的好方法,但最近我一直想知道我缺少哪些可视化技术。您认为最不充分利用的情节类型是什么?

答案应该:

  1. 不是很常用 实践。
  2. 没有太多可以理解 背景讨论。
  3. 适用于许多常见情况。
  4. 包含可重现的代码以进行创建 一个例子(最好是R)。链接的图像将是 好的。

15 个答案:

答案 0 :(得分:88)

我真的同意其他海报:Tufte's books are fantastic,非常值得一读。

首先,我会在今年早些时候从“查看数据”中指出a very nice tutorial on ggplot2 and ggobi。除此之外,我只是强调来自R的一个可视化,以及两个图形包(它们不像基本图形,晶格或ggplot那样广泛使用):

热图

我非常喜欢可以处理多变量数据的可视化,尤其是时间序列数据。 Heat maps对此非常有用。一个非常整洁的一个是David Smith on the Revolutions blog。这是ggplot代码由Hadley提供:

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图形的功能。网上有很多例子(包括在rgl文档中)。

The R-Wiki has a nice example如何使用rgl绘制3D散点图。

<强> GGobi

另一个值得了解的包是rggobia Springer book on the subject有许多优秀的文档/示例,包括"Looking at Data"课程。

答案 1 :(得分:56)

使用极坐标的情节肯定未被充分利用 - 有些人会说有充分的理由。我认为证明其使用合理性的情况并不常见;我还认为,当这些情况出现时,极坐标图可以揭示线性图不能的数据模式。

我认为这是因为有时您的数据固有极性而非线性 - 例如,它是周期性的(x坐标表示多天24小时内的时间),或者数据是以前映射到极地特征空间。

这是一个例子。此图显示了网站按小时计算的平均流量。请注意晚上10点和凌晨1点的两个尖峰。对于本网站的网络工程师来说,这些是重要的;同样重要的是它们彼此相邻(相隔两个小时)。但是如果你在传统的坐标系上绘制相同的数据,这个模式将被完全隐藏 - 线性绘制,这两个尖峰将相隔<20> 小时,尽管它们也只是两个连续几天相隔几小时。上面的极坐标图以简洁直观的方式显示了这一点(传说不是必需的)。

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

有两种方法(我知道)使用R创建这样的图(我在上面用w创建了图)。一种是在基本或网格图形系统中编写自己的函数。另一种方法是使用循环包,这更容易。您将使用的功能是“ 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)

答案 2 :(得分:56)

我非常喜欢dotplots并且发现当我向其他人推荐适当的数据问题时,他们总是感到惊讶和高兴。它们似乎没有多大用处,我无法弄清楚原因。

以下是Quick-R的示例: dotplot on car data

我相信克利夫兰对这些的发展和传播负有最大的责任,而他的书中的例子(使用点图可以很容易地检测到错误的数据)是他们使用的有力论据。请注意,上面的示例每行仅放置一个点,而它们的实际功率来自每行上有多个点,并附有一个图例说明哪个是哪个。例如,您可以在三个不同的时间点使用不同的符号或颜色,从而轻松了解不同类别的时间模式。

在以下示例中(在所有内容的Excel中完成!),您可以清楚地看到标签交换可能会遇到哪个类别。

Dotplot with 2 groups

答案 3 :(得分:54)

如果您的散点图有太多的点,它会变得完全混乱,请尝试平滑的散点图。这是一个例子:

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包的优点,因此属于{{1}}包标准R安装。

Smiley as a regular or smoothed scatter plot

答案 4 :(得分:30)

关于迷你图和其他Tufte想法,YaleToolkit上的CRAN包提供了函数sparklinesparklines

另一个对大型数据集有用的软件包是hexbin,因为它巧妙地将数据“分类”到存储桶中以处理可能对于天真的散点图来说太大的数据集。

答案 5 :(得分:28)

Violin plots(将箱形图与核密度结合起来)相对异国情调且非常酷。 R中的vioplot包允许您轻松制作它们。

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

enter image description here

答案 6 :(得分:25)

我正在审核的另一个不错的时间序列可视化是the "bump chart"(如this post on the "Learning R" blog中所述)。这对于可视化位置随时间的变化非常有用。

您可以阅读有关如何在http://learnr.wordpress.com/上创建它的信息,但最终结果如下:

alt text

答案 7 :(得分:20)

我也喜欢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

制作这些内容的其他方式(包括其他类型的Tufte boxplot)是discussed in this question

答案 8 :(得分:18)

Horizon graphs(pdf),用于同时显示多个时间序列。

Parallel coordinates plots(pdf),用于多变量分析。

Associationmosaic图,用于可视化列联表(请参阅vcd包)

答案 9 :(得分:18)

我们不应该忘记可爱和(历史上)重要的茎叶情节(Tufte也喜欢!)。您可以直接获得数据密度和形状的数值概览(当然,如果您的数据集不大于约200个点)。在R中,函数stem产生你的茎叶展开(在工作区中)。我更喜欢使用包fmsb中的gstem函数直接在图形设备中绘制它。以下是逐个叶子显示的海狸体温变化(数据应该在您的默认数据集中):

  require(fmsb)
  gstem(beaver1$temp)

enter image description here

答案 10 :(得分:15)

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

答案 11 :(得分:14)

箱图! R帮助中的示例:

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

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

答案 12 :(得分:11)

在我看来,马赛克图符合所提到的所有四个标准。 r中有一些例子,在马赛克图下。

答案 13 :(得分:10)

查看Edward Tufte的作品,特别是this book

您也可以尝试捕捉his travelling presentation。它非常好,包括他的四本书。 (我发誓,我不拥有他的出版商的股票!)

顺便说一句,我喜欢他的迷你数据可视化技术。惊喜! Google已将其编写并在Google Code

上发布

答案 14 :(得分:1)

摘要图?如本页所述:

Visualizing Summary Statistics and Uncertainty