散点图中的标记之间的间距Matlab

时间:2015-04-25 08:13:14

标签: matlab matlab-figure

我在一张图中有6个散点图,如下所示。

A=rand(10,2); 
B=rand(10,2); 
C=rand(10,2);
figure();
hold on;
scatter( 1:10, A(:,1), 'r*');
scatter( 1:10, A(:,2), 'ro'); 
scatter( 1:10, B(:,1), 'b*'); 
scatter( 1:10, B(:,2), 'bo'); 
scatter( 1:10, C(:,1), 'g*'); 
scatter( 1:10, C(:,2), 'go'); 

我想知道我是否可以在点之间留出一些间距,这样就不会有两个点相互叠加。因此,例如,在x轴的值1上将有6个不同的点(一个代表每个散点图),所以我想知道如何让每个点都有一个垂直的通道? / p>

因此,如果我使用stem而不是使用scatter,您会看到干线叠加,这使得查看绘图更加困难,如下面的屏幕截图所示。因此对于每个xtick它有6个茎,我想知道是否有任何方法我可以稍微移动6个茎中的5个以便它们全部出现。

所以这是我当前词干覆盖的截图:

enter image description here

2 个答案:

答案 0 :(得分:1)

x 值应用小位移?

x = 1:10;
y1 = rand(1,10);
y2 = rand(1,10);
y3 = rand(1,10); %// example data
delta = .004; %// displacement step, relative to x range
x_range = max(x)-min(x);
Delta = range*delta;
hold all
stem(x-Delta, y1, 'o');
stem(x,       y2, '*');
stem(x+Delta, y3, 's');

示例:

enter image description here

答案 1 :(得分:0)

我的第一个答案将是不可能的。如果您有二维数据且某些数据与其他数据重叠,您无法修改数据以改善可视化效果!

如果您需要改进它,可以使用第三维:

figure();
hold on;
scatter3( 1:10, A(:,1), 1*ones(1,10), 'r*');
scatter3( 1:10, A(:,2), 2*ones(1,10), 'ro'); 
scatter3( 1:10, B(:,1), 3*ones(1,10), 'b*'); 
scatter3( 1:10, B(:,2), 4*ones(1,10), 'bo'); 
scatter3( 1:10, C(:,1), 5*ones(1,10), 'g*'); 
scatter3( 1:10, C(:,2), 6*ones(1,10), 'go'); 

在Z轴中,您按要求将数据分隔为“通道”。因此,现在由您和您的用户选择最佳可视化平面。

第二个直接解决方案来分割线条是划分不同子图中的所有散点图:

figure();
subplot(6,1,1)
scatter( 1:10, A(:,1), 'r*');
subplot(6,1,2)
scatter( 1:10, A(:,2), 'ro'); 
subplot(6,1,3)
scatter( 1:10, B(:,1), 'b*'); 
subplot(6,1,4)
scatter( 1:10, B(:,2), 'bo'); 
subplot(6,1,5)
scatter( 1:10, C(:,1), 'g*'); 
subplot(6,1,6)
scatter( 1:10, C(:,2), 'go');