带有大型数据集的散点图&彩条

时间:2013-11-19 14:51:26

标签: matlab plot scatter-plot scatter

我有3个数组x,y,c,其中c的每个值都是x,y的强度,介于-3到3之间

我想将每个点绘制为一个带有由强度c确定的颜色的实心圆。

我尝试过使用scatter(x,y,10,c)但这基本上会导致计算机崩溃,因为数据太多了。

注意每个数组包含大约500,000个数据点。

我可以用更好的方式来策划这个吗?

1 个答案:

答案 0 :(得分:1)

我认为您的数据集太大,无法使用您描述的方法进行绘图。如果您有500k数据点,并且每个“实心圆圈”占用5个像素,则您的数据将无法适应通常的1000x1000全屏幕图。

两个想法:

(1)如果这是你想要的行为,你必须接受你不会看到所有数据,因为有些点会阻碍其他数据。使用类似

的内容对数据集进行子采样

temp = randperm(500000); temp = temp(1:10000); scatter(x(temp),y(temp),10,c(temp));

是的,你会以这种方式丢失一些数据,但无论如何你都会失去它。这是快速目视检查的最简单方法。

(2)如果您确实想要查看所有数据,那么您应该考虑根据需要编写自定义绘图例程。以下是它的基本要点:

myImage = zeros(1000, 1000);
X_MIN = min(x);
Y_MIN = min(y);
X_RANGE = max(x) - min(x);
Y_RANGE = max(y) - min(y);
for idx = 1:500000
  xIndex = round( (x(idx) - X_MIN) * 999/(X_RANGE)) + 1;
  yIndex = round( (x(idx) - Y_MIN) * 999/(Y_RANGE)) + 1;
  myImage(xIndex, yIndex) = myImage(xIndex, yIndex) + c(idx);
end
imshow(myImage, []);

我没有检查过,所以可能存在索引错误,但是你得到了漂移。如果您要调用它,您可能希望使用sub2ind对此代码进行矢量化。