Matlab 翻转散点图的矩阵

Matlab 翻转散点图的矩阵,matlab,scatter-plot,Matlab,Scatter Plot,我想向右翻转一个“弧”。我尝试过imrotate,但它给我的是向下的“弧”,而不是右面,如下图所示。请看一下我正在使用的。先谢谢你 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;

我想向右翻转一个“弧”。我尝试过imrotate,但它给我的是向下的“弧”,而不是右面,如下图所示。请看一下我正在使用的。先谢谢你

 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)

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(翻转)

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(翻转)

您希望反映
Dx
的分布。反射操作意味着取
x
并使其
-x

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

当您这样做并打印时,您将看到x轴的值已移到负值。也许这对你的目标来说已经足够好了,就这样

如果我理解正确,这是不够的。现在,为了将该分布恢复到正x轴值,需要对其进行转换。 这意味着:

Dx(:,1)=-Dx(:,1)+将x轴转换为正值的某个数字

您可以通过首先获取分布的平均值(或质心)来选择该数字,即
平均值(Dx(:,1))
,这是您的值分布所围绕的值。如果你只从分布中减去平均值,你最终得到的值约为零,要使其在正方向上达到相同的距离,你需要再减去一次该平均值

Dx(:,1)=-Dx(:,1)+2*平均值(Dx(:,1))


读取此行意味着
平均值(Dx)
是在反射之前计算的,因此它有一个正值…

您想反映
Dx的分布。反射操作意味着取
x
并使其
-x

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

当您这样做并打印时,您将看到x轴的值已移到负值。也许这对你的目标来说已经足够好了,就这样

如果我理解正确,这是不够的。现在,为了将该分布恢复到正x轴值,需要对其进行转换。 这意味着:

Dx(:,1)=-Dx(:,1)+将x轴转换为正值的某个数字

您可以通过首先获取分布的平均值(或质心)来选择该数字,即
平均值(Dx(:,1))
,这是您的值分布所围绕的值。如果你只从分布中减去平均值,你最终得到的值约为零,要使其在正方向上达到相同的距离,你需要再减去一次该平均值

Dx(:,1)=-Dx(:,1)+2*平均值(Dx(:,1))


读取这条线意味着
平均值(Dx)
是反射之前计算的,因此它具有正值…

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

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

这将翻转轴,使其向左而不是向右增加。绘制的数据仍然相同,只是显示方式不同而已。这可能是您想要的,也可能不是。

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

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

这将翻转轴,使其向左而不是向右增加。绘制的数据仍然相同,只是显示方式不同而已。这可能是也可能不是你想要的。

你真的是指旋转还是反射?我想你可能真的想从你的解释中得到fliplr,因为你用了“flip”这个词。我是说反思,我应该更新这个问题的标题。我尝试了fliplr命令,它显示了与上图类似的结果。因此只需通过
Dx(:,1)=-Dx(:,1)+2*平均值(Dx(:,1))进行反射即可@bla有效,请您添加一个答案,以便我可以接受。另外,请添加一些解释,说明为什么我们需要添加
2*平均值(Dx(:,1))
并从
Dx(:,1)
中减去。您真的是指旋转还是指反射?我想你可能真的想从你的解释中得到fliplr,因为你用了“flip”这个词。我是说反思,我应该更新这个问题的标题。我尝试了fliplr命令,它显示了与上图类似的结果。因此只需通过
Dx(:,1)=-Dx(:,1)+2*平均值(Dx(:,1))进行反射即可@bla有效,请您添加一个答案,以便我可以接受。另外,请解释一下为什么我们需要加上
2*mean(Dx(:,1))
并从
Dx(:,1)
中减去。投票失败的原因是什么?这个解决方案直接回答了这个问题。投票失败的原因是什么?这个解决方案直接回答了这个问题。