翻转散点图的矩阵

时间:2020-04-27 15:26:20

标签: matlab scatter-plot

我想在右侧翻转一个“弧”。我尝试过旋转,但是它使我的“弧形”面朝下而不是右侧,如下图所示。请查看我使用的code。预先谢谢你。

 R = 8; x_c = 5; y_c = 8;
thetas = 0:pi/499:pi;
xs = x_c + R*cos(thetas);
ys = y_c + R*sin(thetas);

% Now add some random noise to make the problem a bit more challenging:
mult = 0.5;
xs = xs+mult*randn(size(xs));
ys = ys+mult*randn(size(ys));

c = linspace(1,50,500);

D = [xs' ys'];
Dx = imrotate(D, 180, 'crop');
Dy=Dx;
Dy = imrotate(Dy, 180, 'crop') ;
subplot(211)
scatter(Dx(:,1), Dx(:,2), 140,  c, 'filled', 'LineWidth',1.5) 
subplot(212)
scatter(Dy(:,1), Dy(:,2),[],c,  'd','LineWidth',1.5)

enter image description here

3 个答案:

答案 0 :(得分:2)

您要反映Dx的分布。反射的操作意味着将x设为-x

这里Dx的x轴是Dx(:,1),因此首先我们需要编写Dx(:,1) = - Dx(:,1)

这样做并作图时,您会看到x轴的值已移为负值。也许这对您的目的就足够了,就是这样。

如果我对您的理解正确,那还不够。现在,为了使此分布回到x轴正值,需要对其进行平移。 这意味着:

Dx(:,1) = - Dx(:,1) + some number that translated x-axis to positive values

您可以通过首先取分布的平均值(或质心)来选择该数字,即mean(Dx(:,1)),这是您的值在其周围分布的值。如果仅从分布中减去均值,则最终会得到零附近的值,要将其带到正侧相同的距离,则需要减去另一次均值。

Dx(:,1) = - Dx(:,1) + 2 * mean(Dx(:,1))

读取此行表示mean(Dx)是在反射之​​前计算的,因此它具有正值...

答案 1 :(得分:1)

另一种解决方案是将轴的“ XDir”属性设置为“反向”:

set(gca,'XDir','reverse')

这将翻转轴,因此它向左增加而不是向右增加。绘制的数据仍然相同,只是显示方式有所不同。这可能不是您想要的。

答案 2 :(得分:-1)

fliplr可以使用,但不能与您的Dx数组一起使用。 fliplr对数据而不是图像进行操作,因此对于大小为500 x 2的数组,该函数将x值翻转为y值,反之亦然,这就是为什么要旋转而不是反射的原因

使fliplr工作的一种方法是在绘制图像后捕获图像数据,然后翻转它:

scatter(Dx(:,1), Dx(:,2), 140,  c, 'filled', 'LineWidth',1.5)
f = getframe;
flipped = fliplr(f.cdata);
imshow(flipped)