这里's an example. This plot shows a Website'表示按小时计算的交通量 . 请注意晚上10点和凌晨1点的两个尖峰 . 对于网站's network engineers, those are significant; it'也很重要,它们彼此相邻(仅相隔 two 小时) . 但是如果你在传统的坐标系上绘制相同的数据,这个模式将被完全隐藏 - 线性绘制,这两个尖峰将相隔几个小时,虽然它们在连续几天也只相差两小时 . 上面的极坐标图以简洁直观的方式显示了这一点(传说不是必需的) .
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
15 回答
我真的同意其他海报:Tufte's books are fantastic非常值得一读 .
首先,我会在今年早些时候从"Looking at Data"指出你a very nice tutorial on ggplot2 and ggobi . 除此之外,我只是强调来自R的一个可视化,以及两个图形包(它们不像基本图形,网格或ggplot那样广泛使用):
Heat Maps
我非常喜欢可以处理多变量数据的可视化,尤其是时间序列数据 . Heat maps对此有用 . 其中一个非常整洁的是David Smith on the Revolutions blog . 这是由哈德利提供的ggplot代码:
最终看起来有点像这样:
RGL: Interactive 3D Graphics
另一个非常值得学习的软件包是RGL,它可以轻松提供创建交互式3D图形的功能 . 在线有很多例子(包括在rgl文档中) .
The R-Wiki has a nice example如何使用rgl绘制三维散点图 .
GGobi
另一个值得了解的包是rggobi . 有a Springer book on the subject,以及许多优秀的在线文档/示例,包括"Looking at Data"课程 .
使用极坐标的情节肯定未被充分利用 - 有些人会说有充分的理由 . 我认为证明其使用合理性的情况并不常见;我还认为,当这些情况出现时,极坐标图可以揭示线性图不能的数据模式 .
我认为这是因为有时你的数据本质上是极性的而不是线性的 - 例如,它是周期性的(x坐标表示多天24小时内的时间),或者数据先前被映射到极性特征空间 .
这里's an example. This plot shows a Website'表示按小时计算的交通量 . 请注意晚上10点和凌晨1点的两个尖峰 . 对于网站's network engineers, those are significant; it'也很重要,它们彼此相邻(仅相隔 two 小时) . 但是如果你在传统的坐标系上绘制相同的数据,这个模式将被完全隐藏 - 线性绘制,这两个尖峰将相隔几个小时,虽然它们在连续几天也只相差两小时 . 上面的极坐标图以简洁直观的方式显示了这一点(传说不是必需的) .
有两种方法(我知道)使用R创建这样的图(我在上面用w创建了图) . 一种是在基本或网格图形系统中编写自己的函数 . 换句话说,更简单的方法是使用 circular package . 您将使用的功能是' rose.diag ':
我真的很喜欢dotplots并且当我向其他人推荐它们以获得适当的数据问题时,他们总是感到惊讶和高兴 . 他们不知道为什么 .
以下是Quick-R的示例:
我相信克利夫兰对这些的发展和发布负有最大的责任,而他的书中的例子(用点图很容易检测出错误的数据)是他们使用的有力论据 . 请注意,上面的例子每行只放一个点,而它们的实际功率来自每条线上有多个点,图例说明哪个是哪个 . 例如,您可以在三个不同的时间点使用不同的符号或颜色,从而轻松获得不同类别的时间模式 .
在以下示例中(在所有内容的Excel中完成!),您可以清楚地看到标签交换可能遇到的类别 .
如果您的散点图有很多点,它会变得完全混乱,请尝试使用平滑的散点图 . 这是一个例子:
hexbin
包(由@Dirk Eddelbuettel建议)用于相同的目的,但smoothScatter()
的优点是它属于graphics
包,因此是标准R安装的一部分 .关于迷你图和其他Tufte想法,CRAN上的YaleToolkit包提供了函数
sparkline
和sparklines
.另一个对较大数据集有用的包是hexbin,因为它巧妙地将数据放入桶中以处理可能对于天真散点图来说太大的数据集 .
Violin plots(它将盒子图与核心密度结合起来)相对异国情调且非常酷 . R中的vioplot包允许您轻松制作它们 .
这是一个例子(维基百科链接也显示了一个例子):
我正在审查的另一个不错的时间序列可视化是the "bump chart"(如this post on the "Learning R" blog) . 这对于可视化位置随时间的变化非常有用 .
您可以阅读有关如何在http://learnr.wordpress.com/上创建它的信息,但这最终看起来像:
我也喜欢Tufte对箱形图的修改,这使得你可以更容易地进行小倍数比较,因为它们在水平方向非常“薄”,并且不会使用多余墨水使图形混乱 . 但是,它适用于相当多的类别;如果你在一个情节上只有一些,那么常规(Tukey)箱形图看起来更好,因为它们对它们有更多的重要性 .
其他制作方法(包括其他类型的Tufte boxplot)是discussed in this question .
Horizon graphs(pdf),用于一次可视化多个时间序列 .
Parallel coordinates plots(pdf),用于多变量分析 .
Association和mosaic图,用于可视化列联表(参见vcd包)
我们不应该忘记可爱和(历史上)重要的茎叶情节(Tufte也喜欢!) . 您可以直接获得数据密度和形状的数值概览(当然,如果您的数据集不大于约200个点) . 在R中,函数
stem
产生你的茎叶展开(在工作区中) . 我更喜欢使用包fmsb中的gstem
函数直接在图形设备中绘制它 . 以下是逐个叶子显示的海狸体温变化(数据应该在您的默认数据集中):除了Tufte的出色工作,我推荐William S. Cleveland的书:可视化数据和图形数据元素 . 它们不仅非常出色,而且都是在R中完成的,我相信这些代码是公开的 .
盒形图! R帮助中的示例:
在我看来,这是快速查看数据或比较分布的最方便的方法 . 对于更复杂的发行版,有一个名为
vioplot
的扩展名 .在我看来马赛克图符合所提到的所有四个标准 . r中有一些例子,在马赛克图下 .
查看Edward Tufte的作品,特别是this book
您也可以尝试捕获his travelling presentation . 它's quite good and includes a bundle of four of his books. (i swear i don'拥有他的出版商的股票!)
顺便说一句,我喜欢他的迷你数据可视化技术 . 惊喜!谷歌已经写好并把它发布在Google Code
摘要图?就像在这个页面中提到的:
Visualizing Summary Statistics and Uncertainty