直方图和散点图是可视化数据和变量之间关系的好方法,但最近我一直想知道我缺少哪些可视化技术。您认为最不充分利用的情节类型是什么?
答案应该:
答案 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)
最终看起来有点像这样:
RGL:交互式3D图形
另一个非常值得学习的软件包是RGL,它可以轻松提供创建交互式3D图形的功能。网上有很多例子(包括在rgl文档中)。
The R-Wiki has a nice example如何使用rgl绘制3D散点图。
<强> GGobi 强>
另一个值得了解的包是rggobi。 a Springer book on the subject有许多优秀的文档/示例,包括"Looking at Data"课程。
答案 1 :(得分:56)
使用极坐标的情节肯定未被充分利用 - 有些人会说有充分的理由。我认为证明其使用合理性的情况并不常见;我还认为,当这些情况出现时,极坐标图可以揭示线性图不能的数据模式。
我认为这是因为有时您的数据固有极性而非线性 - 例如,它是周期性的(x坐标表示多天24小时内的时间),或者数据是以前映射到极地特征空间。
这是一个例子。此图显示了网站按小时计算的平均流量。请注意晚上10点和凌晨1点的两个尖峰。对于本网站的网络工程师来说,这些是重要的;同样重要的是它们彼此相邻(相隔两个小时)。但是如果你在传统的坐标系上绘制相同的数据,这个模式将被完全隐藏 - 线性绘制,这两个尖峰将相隔<20> 小时,尽管它们也只是两个连续几天相隔几小时。上面的极坐标图以简洁直观的方式显示了这一点(传说不是必需的)。
有两种方法(我知道)使用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的示例:
我相信克利夫兰对这些的发展和传播负有最大的责任,而他的书中的例子(使用点图可以很容易地检测到错误的数据)是他们使用的有力论据。请注意,上面的示例每行仅放置一个点,而它们的实际功率来自每行上有多个点,并附有一个图例说明哪个是哪个。例如,您可以在三个不同的时间点使用不同的符号或颜色,从而轻松了解不同类别的时间模式。
在以下示例中(在所有内容的Excel中完成!),您可以清楚地看到标签交换可能会遇到哪个类别。
答案 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安装。
答案 4 :(得分:30)
关于迷你图和其他Tufte想法,YaleToolkit上的CRAN包提供了函数sparkline
和sparklines
。
另一个对大型数据集有用的软件包是hexbin,因为它巧妙地将数据“分类”到存储桶中以处理可能对于天真的散点图来说太大的数据集。
答案 5 :(得分:28)
答案 6 :(得分:25)
我正在审核的另一个不错的时间序列可视化是the "bump chart"(如this post on the "Learning R" blog中所述)。这对于可视化位置随时间的变化非常有用。
您可以阅读有关如何在http://learnr.wordpress.com/上创建它的信息,但最终结果如下:
答案 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
)
制作这些内容的其他方式(包括其他类型的Tufte boxplot)是discussed in this question。
答案 8 :(得分:18)
Horizon graphs(pdf),用于同时显示多个时间序列。
Parallel coordinates plots(pdf),用于多变量分析。
Association和mosaic图,用于可视化列联表(请参阅vcd包)
答案 9 :(得分:18)
我们不应该忘记可爱和(历史上)重要的茎叶情节(Tufte也喜欢!)。您可以直接获得数据密度和形状的数值概览(当然,如果您的数据集不大于约200个点)。在R中,函数stem
产生你的茎叶展开(在工作区中)。我更喜欢使用包fmsb中的gstem
函数直接在图形设备中绘制它。以下是逐个叶子显示的海狸体温变化(数据应该在您的默认数据集中):
require(fmsb)
gstem(beaver1$temp)
答案 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)