在相同的坐标处显示点:Matlab

时间:2017-04-28 11:09:30

标签: matlab plot

我想在同一坐标中绘制多个点,但偏移距离较小,因此可以看到所有点。

我有一个N-by-M矩阵示例:

[0, 12, 7,  10, 0, 12;
 0, 7,  7,  10, 0, 7 ;
 7, 12, -3, 0,  7, 7 ;
 0, 10, 4,  0,  7, 10];

我希望x轴在这种情况下1:Mx=[1,2,3,4,5,6]

y轴应该是列,所以在x=1它应该绘制[0,0,7,0] 但这只给了我两个不同的可见点([1,0][1,7])。其他点隐藏在[1,0]处绘制的最后一个点下方。

如何用点绘制每个点,并在每个点的xy坐标处添加一个小偏移(在-0.1和0.1之间), 使不同的点可见?

2 个答案:

答案 0 :(得分:3)

少量换档以提高知名度(可能)是一个坏主意......

  • 介绍你的情节不准确
  • 可能实际上不太清楚

更好的选择是使用同心圆,使用scatter改变磅值。

% Set up matrix for plotting
m = [0, 12, 7,  10, 0, 12;
     0, 7,  7,  10, 0, 7 ;
     7, 12, -3, 0,  7, 7 ;
     0, 10, 4,  0,  7, 10];
x = 1:size(m,2);
% Unique elements in the matrix (could use tolerancing here)
u = unique(m);
% Set up sizes of each point
s = zeros(size(m));
for ii = 1:numel(u); 
    c = cumsum(m == u(ii),1);  % Running total of matching value in columns
    s = s + c.*(m == u(ii));   % Increase point size by number of points
end
s = (s*5).^2; % Scatter takes square-points size, times 5 for scale
% Plot each row
figure; hold on;
for jj = 1:size(m,1)
    scatter(x, m(jj,:), s(jj,:), 'linewidth', 1.25); % Using the sizes we just made
end
hold off; grid on; xlim([0,7]);

输出:

plot

这种方法的优点是能够立即看到热点"在您的数据中有很多点。此外,虽然的颜色更明显,但读取绘图并不需要颜色。在使用灰度打印输出或色盲同事时,这很方便。

一种类似但替代的方法是给每一行自己的大小,然后大小/颜色是一致的。你只是没有得到热点"你可能会得到一个没有小圈子的大圆圈 - 这使得查看实际的数据点位置变得更加困难。

答案 1 :(得分:0)

你想添加一点抖动?为什么不统一这样做:

mat = [0,12,7,10,0,12; 0,7,7,10,0,7; 7,12,-3,0,7,7; 0,10,4,0,7,10];
mat2 = mat' + 0.1 * repmat(1:4, [6 1]) - 0.15;

f1 = figure('Color', ones(1,3));
plot(mat2, '.', 'MarkerSize', 20);
box off;
ax1 = gca;
ax1.XTick = 1:6;
ax1.XLim = [0 7];

enter image description here

我更喜欢只将抖动添加到y轴,所以这些点仍然排成一行,但如果你想将它添加到x轴和y轴,只需这样做:

xvals = repmat(1:6, [4 1])' + 0.1 * repmat(1:4, [6 1]) - 0.25;
plot(xvals, mat2, '.', 'MarkerSize', 20);