如何在MATLAB中制作如下图所示的图?
我不需要标签,所以你可以忽略它们。我尝试使用普通的2D绘图,为每个数据点提供0到y的参数。它确实有帮助,但大多数情节仍然是空/白色,我不希望这样。
我该如何解决这个问题?
编辑:
这就是我的情节(玩ylim的值没有帮助):
hold on
for i=1:120
if genders(v_labels(i)) == CLASS_WOMAN
plot(v_images_lda(i,:) * w_lda,0,'r*');
else
plot(v_images_lda(i,:) * w_lda,0,'b.');
end
end
title('LDA 1D Plot');
ylim([-0.2 0.2]);
hold off
答案 0 :(得分:10)
执行此操作的一种方法是调整轴的'XLim'
,'YLim'
和'DataAspectRatio'
属性,使其基本上呈现为单行。这是一个例子:
data1 = rand(1,20)./2; %# Sample data set 1
data2 = 0.3+rand(1,20)./2; %# Sample data set 2
hAxes = axes('NextPlot','add',... %# Add subsequent plots to the axes,
'DataAspectRatio',[1 1 1],... %# match the scaling of each axis,
'XLim',[0 1],... %# set the x axis limit,
'YLim',[0 eps],... %# set the y axis limit (tiny!),
'Color','none'); %# and don't use a background color
plot(data1,0,'r*','MarkerSize',10); %# Plot data set 1
plot(data2,0,'b.','MarkerSize',10); %# Plot data set 2
你会得到以下情节:
答案 1 :(得分:5)
以下是使用dsxy2figxy
和annotate
重现您的身材的一种方法。 dsxy2figxy
第一次很难找到,因为它并不是真的在你的道路上。它是MATLAB包的一部分,在示例函数中提供。您可以通过在帮助文档中搜索它来访问它,一旦找到它,打开它并将其保存到路径中的文件夹中。
h1=figure(1);clf
subplot(4,1,1);
hold on
xlim([0.2,1]);ylim([-1,1])
%arrow
[arrowX,arrowY]=dsxy2figxy([0.2,1],[0,0]);
annotation('arrow',arrowX,arrowY)
%crosses
x=[0.3,0.4,0.6,0.7,0.75];
plot(x,0,'kx','markersize',10)
%pipes
p=[0.5,0.65];
text(p,[0,0],'$$\vert$$','interpreter','latex')
%text
text([0.25,0.5,0.65],[1,-1,-1]/2,{'$$d_i$$','E[d]','$$\theta$$'},'interpreter','latex')
axis off
print('-depsc','arrowFigure')
这将产生下图:
这是一种做法的黑客方式,因为我已经欺骗MATLAB打印一个子图。所有栅格化格式(jpeg
,png
等)都不会给你相同的结果,因为它们都会打印整个数字,包括未声明的子图应该在哪里。所以为了得到这个效果,它必须是eps
,并且它可以使用它,因为eps使用更紧密的边界框...所以所有无意义的空白被修剪。然后,您可以将其转换为您想要的任何其他格式。
答案 2 :(得分:3)
好的,所以我最接近解决这个问题的是以下
hax = gca();
hold on
for i=1:120
if genders(v_labels(i)) == CLASS_WOMAN
plot(v_images_lda(i,:) * w_lda,0,'r*');
else
plot(v_images_lda(i,:) * w_lda,0,'b.');
end
end
set(hax, 'visible', 'off');
hax2 = axes();
set(hax2, 'color', 'none', 'ytick', [], 'ycolor', get(gcf, 'color');
pos = get(hax, 'position');
set(hax2, 'position', [pos(1), pos(2)+0.5*pos(4), pos(3), 0.5*pos(4)]);
title('LDA 1D Plot');
hold off
所以简而言之,我隐藏了原始轴并创建了一个位于原始轴0的新轴,因为我无法完全移除y轴,所以我将它的颜色设置为图的背景颜色。 然后,您可以决定是否也想要使用x轴的刻度线。
希望这有帮助!
答案 3 :(得分:-1)
非常天真的技巧,但却很有用。
使用matlab绘图功能绘制2d。然后使用编辑图属性将其压缩到需要1D绘图的轴上!希望有所帮助:)