Как сделать одномерные сюжеты в MATLAB? - PullRequest
5 голосов
/ 21 апреля 2011

Как я могу создавать графики в MATLAB, как показано ниже? 1D plot example

Мне не понадобятся ярлыки, поэтому вы можете их игнорировать. Я попытался использовать обычный двухмерный график, задав параметр от 0 до y для каждой точки данных. Это помогает, но большая часть сюжета остается пустой / белой, и я этого не хочу. 1d plot in 2d figure

Как мне решить эту проблему?

Edit:

Вот как я строю (игра со значениями 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 ]

10 голосов
/ 22 апреля 2011

Один из способов сделать это - настроить свойства осей '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

5 голосов
/ 22 апреля 2011

Вот один из способов воспроизвести вашу фигуру, используя 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')

В результате будет получена следующая цифра:

enter image description here

Это своего рода хакерский способ сделать это, так как я обманул MATLAB для печати только одного подзаговора. Все растеризованные форматы (jpeg, png и т. Д.) Не дадут вам одинакового результата, так как все они будут печатать всю фигуру, включая то, где должны были быть необъявленные субплоты. Таким образом, чтобы получить этот эффект, он должен быть eps, и он работает с ним, потому что eps использует намного более жесткие ограничивающие рамки ... так что все бессмысленные пробелы обрезаются. Затем вы можете преобразовать это в любой другой формат.

3 голосов
/ 21 апреля 2011

Хорошо, поэтому самое близкое к решению это следующее:

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.

Надеюсь, это поможет!

0 голосов
/ 16 февраля 2016

Очень наивный трюк, но полезный.

Построение в 2d с использованием функции построения MatlabЗатем, используя свойства редактирования фигуры, сожмите ее по той оси, на которой вам нужен 1D график !!Надеюсь, это поможет :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...