可视化二维数据的频率分布
布雷特本周的选择是“cloudPlot”,通过丹尼尔Armyr.
随着数据采集和存储能力的不断扩大,我们不断受到越来越大的数据集的轰炸。分析——甚至只是可视化——这些数据代表了我们这个时代最紧迫的挑战之一。
每当我提出“加速MATLAB应用程序”时,我总是强调有“更好”(即有效)的方法来使用MATLAB,也有“更糟糕”(低效)的方法来使用它。(当然,所有语言都是如此,但是在像MATLAB这样的解释型语言中,低效做事的“成本”可能比与实现糟糕的编译代码相比更明显。我发现那些告诉我MATLAB很慢的人,往往没有充分发挥它的潜力。)我还想指出,编写更好的代码除了性能之外,还需要密切关注内存管理。(在前面提到的“大数据挑战”中,这一点变得更加重要)事实上,“加速”演示的其中一个主题涉及数据的高效可视化——并且认识到可视化可能包含数据的完整副本。
Daniel的cloudPlot提供了一种非常聪明且实现得非常好的大型二维数据可视化方法。您可以在下面的代码部分中清楚地看到这一点。首先,我们创建一些数据。我们将创建x而且y是100万乘1正态分布随机双精度的向量;创建时,每个变量占用8兆内存:
X = randn(1000000,1);Y = randn(1000000,1);
现在我们如何最好地形象化x与y?当然,我们可以把它们画出来
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兆字节。(右上方的图像较小,左下方的图像较大。)
非常有用!
- 类别:
- 选择
评论
如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。