我想在同一坐标中绘制多个点,但偏移距离较小,因此可以看到所有点。
我有一个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:M
为x=[1,2,3,4,5,6]
。
y轴应该是列,所以在x=1
它应该绘制[0,0,7,0]
但这只给了我两个不同的可见点([1,0]
和[1,7]
)。其他点隐藏在[1,0]
处绘制的最后一个点下方。
如何用点绘制每个点,并在每个点的x
和y
坐标处添加一个小偏移(在-0.1和0.1之间),
使不同的点可见?
答案 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]);
输出:
这种方法的优点是能够立即看到热点"在您的数据中有很多点。此外,虽然的颜色更明显,但读取绘图并不需要颜色。在使用灰度打印输出或色盲同事时,这很方便。
一种类似但替代的方法是给每一行自己的大小,然后大小/颜色是一致的。你只是没有得到热点"你可能会得到一个没有小圈子的大圆圈 - 这使得查看实际的数据点位置变得更加困难。
答案 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];
我更喜欢只将抖动添加到y轴,所以这些点仍然排成一行,但如果你想将它添加到x轴和y轴,只需这样做:
xvals = repmat(1:6, [4 1])' + 0.1 * repmat(1:4, [6 1]) - 0.25;
plot(xvals, mat2, '.', 'MarkerSize', 20);