根据点密度的三维散点图的颜色代码点

时间:2017-07-03 16:03:00

标签: matlab plot scatter colormap density-plot

我在xyz-sphere中有一个点的三维散点图。我想知道是否有办法根据数据的密度对散点图进行色彩映射/色调。基本上,具有最密集聚类数据点的散点图部分将是暗红色,半密集聚类数据点将是中红色,稀疏聚类数据点将是浅红色。

这是我想到的方式,但(希望)可能有一个更简单的功能或命令来执行此操作。

设置一个阈值,分散中的数据点必须包围:

[> =半径为1的球体内的10个其他点,颜色为深红色,

[半径为1的球体内的5-9个其他点为中红色,

[0-4在半径为1的球体内,为浅红色。

当然,我希望有一种更简单的方法可以在彩色地图中使用超过3种颜色,所以如果有人有任何想法如何编码,我会很感激帮助!非常感谢你。

这是我的数组的片段:

184    115   3915
185    115   3916
185    115   1205
186    115   4094
187    115   2237
192    115   1519
193    115   1327
201    115   1170
240    115   2946
241    115   1332
 54    116   1244
 58    116   3650
 59    116   3984
 60    116   1631
 61    116   1198
 61    116   1194
 62    116   1189
 65    116   1185
186    116   3669
188    116   3986
189    116   2027
197    116   1200
201    116   1254
226    116   3752
227    116   1457
242    116   1405
 54    117   1191
 54    117   1305
 56    117   1177
 58    117   1169
 61    117   1367
 62    117   1428
 62    117   1434
 62    117   1435
 63    117   1422
198    117   1197
229    117   1312
230    117   1179
243    117   1272
 55    118   1236
 56    118   1166
 61    118   1191
 65    118   1755
 57    119   1213
 57    119   1176
 58    119   1253
 62    119   1365
 62    119   1331
 63    119   1457
 63    119   1251
 66    119   1842
 66    119   1468
 59    120   1489
 59    120   1387
 60    120   1218
 60    120   1224
 61    120   1214
 61    120   1440
 62    120   1198
 64    120   1240
205    120   3601
205    120   1168
206    120   3727
207    120   4089
208    120   2128
208    120   1160
 56    121   1293
 57    121   1183
 59    121   1371
 59    121   1347
 61    121   1314
 64    121   1346
207    121   3562
208    121   3845
209    121   3534
210    121   1201
210    121   1405
 83    122   1794
206    122   1259
207    122   1161
 83    123   3550

2 个答案:

答案 0 :(得分:1)

在我的方法中,我使用阈值因子 has ----------------------------------------------- | ViewController | Navigation bar of | ----------------------------------------------- | A | B | ----------------------------------------------- | B | C | ----------------------------------------------- 来确定在计算每个单独点的距离时考虑多少个其他点。 navigationController.setNavigationBarHidden(false, animated: true)表示每个点计算到所有其他点的平均距离,T表示每个点计算到最接近1%的其他点的平均距离。

T = 1

enter image description here

答案 1 :(得分:0)

这是一个相当粗略的功能,但我认为它可以实现与你想要的相似的结果。

  1. 遍历每个点,计算某个公差距离内的点数。
  2. 使用附近点的计数作为颜色的缩放来绘制这些点。
  3. 代码:

    a = rand(1000,3);       % Create random matrix, use your data here
    n = zeros(size(a,1),1); % Set up array for number of nearby points
    tol = 0.2;              % Tolerance for (squared) distance to count as "nearby" 
    sz = size(a,1);         % Shorthand for size of data
    % Loop over every point
    for ii = 1:sz;
        dists = sum((repmat(a(ii,:), sz, 1) - a).^2, 2); % Get standard Euclidean distance 
        n(ii) = nnz(dists < tol); % Count number of points within tolerance
    end
    % Plot, colouring by an nx3 RGB array, in this case just 
    % scaling the red and having no green or blue.
    scatter3(a(:,1), a(:,2), a(:,3), [], [n./max(n), zeros(numel(n),2)], 'filled');
    grid on;
    

    输出:

    plot