本周文件交换选择

我们最好的用户反馈

可视化二维数据的频率分布

布雷特本周的选择是“cloudPlot”,通过丹尼尔Armyr

随着数据采集和存储能力的不断扩大,我们不断受到越来越大的数据集的轰炸。分析——甚至只是可视化——这些数据代表了我们这个时代最紧迫的挑战之一。

每当我提出“加速MATLAB应用程序”时,我总是强调有“更好”(即有效)的方法来使用MATLAB,也有“更糟糕”(低效)的方法来使用它。(当然,所有语言都是如此,但是在像MATLAB这样的解释型语言中,低效做事的“成本”可能比与实现糟糕的编译代码相比更明显。我发现那些告诉我MATLAB很慢的人,往往没有充分发挥它的潜力。)我还想指出,编写更好的代码除了性能之外,还需要密切关注内存管理。(在前面提到的“大数据挑战”中,这一点变得更加重要)事实上,“加速”演示的其中一个主题涉及数据的高效可视化——并且认识到可视化可能包含数据的完整副本。

Daniel的cloudPlot提供了一种非常聪明且实现得非常好的大型二维数据可视化方法。您可以在下面的代码部分中清楚地看到这一点。首先,我们创建一些数据。我们将创建x而且y是100万乘1正态分布随机双精度的向量;创建时,每个变量占用8兆内存:

X = randn(1000000,1);Y = randn(1000000,1);

现在我们如何最好地形象化xy?当然,我们可以把它们画出来

H = plot(x, y,“b”。);轴平等的标题(“绘制所有数据”“字形大小”12“fontweight”“大胆”);

在我看来,这个可视化有两个重要的问题。首先,我们失去了所有数据的微妙之处。我们有大量的点,从中我们能知道的数据分布很少。第二,这个图形包含完整的副本x而且y!当我们得到图的属性时,我们可以很容易地看到:

绘制一小部分数据(比如2%)是一个很好的开始;我们损失了很少的信息,但该图表只包含300kb的数据,而不是16mb:

PCT = 2;步长= 100/pct;H = plot(x(1:步长:结束),y(1:步长:结束),“r”。)标题(“绘制2%的数据”“字形大小”12“fontweight”“大胆”);

然而,我们仍然有一个重大问题,那就是我们无法真正判断我们的数据到底发生了什么。

进入丹尼尔的cloudPlot.在巧妙地将2维数据装箱后,Daniel的函数创建了一个伟大的可视化,它比我们上面创建的图产生了更多的信息:

Subplot (2,2,1);colormap(飞机);cloudPlot(X, Y,[-5 5 -5 5]);标题(“箱子正好一个像素大”);Subplot (2,2,2);cloudPlot(X, Y, [-5 5 -5 5], [], [100 100]);标题(“大于一个像素的箱子”);Subplot (2,2,3);cloudPlot(X, Y, [-5 5 -5 5], [], [1000 1000]);标题(“小于一个像素的箱子”);

现在我们对这些数据的分布有了更多的了解。,左上角的数据图像——可以说是最能说明问题的可视化图像——只占用了大约0.5兆字节。(右上方的图像较小,左下方的图像较大。)

非常有用!

一如既往,我欢迎你的想法和评论.或者给丹尼尔留下反馈在这里




发布与MATLAB®R2013b

|
  • 打印
  • 发送电子邮件

评论

如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。

Baidu
map