如何在MATLAB中制作一维图?

时间:2011-04-21 16:12:48

标签: matlab plot

如何在MATLAB中制作如下图所示的图? 1D plot example

我不需要标签,所以你可以忽略它们。我尝试使用普通的2D绘图,为每个数据点提供0到y的参数。它确实有帮助,但大多数情节仍然是空/白色,我不希望这样。 1d plot in 2d figure

我该如何解决这个问题?

编辑:

这就是我的情节(玩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

4 个答案:

答案 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

你会得到以下情节:

enter image description here

答案 1 :(得分:5)

以下是使用dsxy2figxyannotate重现您的身材的一种方法。 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')

这将产生下图:

enter image description here

这是一种做法的黑客方式,因为我已经欺骗MATLAB打印一个子图。所有栅格化格式(jpegpng等)都不会给你相同的结果,因为它们都会打印整个数字,包括未声明的子图应该在哪里。所以为了得到这个效果,它必须是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绘图的轴上!希望有所帮助:)