Октава (MATLAB), легенда рассеяния и заливка не работают - PullRequest
3 голосов
/ 03 апреля 2011

Я использую Octave, бесплатный псевдо-MATLAB.Моя проблема заключается в следующем: я хочу заполнить пузыри на моем графике разброса, а также разместить легенду.Но я получаю ошибки, когда пытаюсь использовать «заполненный», и при использовании легенды (...) не появляется никаких легенд.Часть моего кода выглядит следующим образом:

%ALL SAMPLES, PHI(Signal) @ THETA(Sample)=0
figure(5)
plot( Angles(:,1)([18:27]),  ALL([18:27]), 10, [1 0 1]);  %Magenta
hold on 
scatter(Angles(:,1)([68:76]), ALL([68:76]), 10, [0 0 0]);   %Black
scatter(Angles(:,1)([86:95]), ALL([86:95]), 10, [1 0 0]);   %Red
scatter(Angles(:,1)([119:127]), ALL([119:127]), 10, [0 1 0]);   %Green
scatter(Angles(:,1)([133:141]), ALL([133:141]), 10, [0 0 1]);   %Blue
hold off
xlabel('Signal PMT angle (Sample angle at 0)'); 
ylabel('Normalized (signal/monitor) intensity');
legend('Control', 'Control', '1+2','Virgin','Cycle #1', 'Location','NorthEast');
title('Plot of All Samples, "-int Intensity"')

Я знаю, что это должно быть plot( Angles(:,1)([18:27]), ALL([18:27]), 10, [1 0 1], 'filled');, но при этом я получаю ошибки.Кроме того, легенда никогда не появляется.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 01 декабря 2013

Видимо, есть проблема с использованием legend с scatter в октаве. На основании этого сообщения:

http://octave.1599824.n4.nabble.com/Legend-in-scatter-plot-td3568032.html

Хитрость в том, чтобы использовать функцию plot для построения точечного графика. Я написал следующую функцию для построения группы диаграмм рассеяния на одной оси.

Эта функция принимает наборы ячеек одинаковой длины. Каждый элемент массива ячеек соответствует отдельной серии. Функция возвращает массив ячеек одинаковой длины, содержащий дескриптор, связанный с каждым графиком. Аргументы функции объясняются ниже:

x_vals: массив ячеек двойников, соответствующих значениям x.

y_vals: массив ячеек из двойных чисел, соответствующих значениям y.

sizes: массив ячеек, представляющий размер маркеров.

colors: массив ячеек двойных массивов длины 3, представляющих [R, G, B] значения цвета маркеров.

styles: массив ячеек строк, представляющих форму маркеров.

    function [handles] = scatter_series_set(x_vals, y_vals, sizes, colors, styles)

        N = length(x_vals);

        if ( (~ ( N == length(y_vals))) || (~ ( N == length(sizes)))  || ...
             (~ ( N == length(colors))) || (~ ( N == length(styles))) )
            error('scatter_series_set: all arguments must be cell arrays of the same length');
        end

        %plot the first series
        handles = cell([N, 1]);
        handles{1} = plot(x_vals{1}, y_vals{1});
        set(handles{1}, 'linestyle', 'none');
        set(handles{1}, 'marker', styles{1});
        set(handles{1}, 'markersize', sizes{1});
        set(handles{1}, 'color', colors{1});

        %plot additional series if present
        if N > 1
            hold on;
            for ind = 2:N
                handles{ind} = plot(x_vals{ind}, y_vals{ind});
                set(handles{ind}, 'linestyle', 'none');
                set(handles{ind}, 'marker', styles{ind});
                set(handles{ind}, 'markersize', sizes{ind});
                set(handles{ind}, 'color', colors{ind});
            end
            hold off;
        end
    end

В следующем примере показано, как использовать эту функцию.

x1 = 0:(2*pi/100):(2*pi);
x2 = 2*x1;
y1 = sin(x1);
y2 = cos(x1);
y3 = sin(x2);
y4 = cos(x2);
names = {'a', 'b', 'c', 'd'};

x_vals = {x1, x1, x1, x1};
y_vals = {y1, y2, y3, y4};
sizes  = {10, 10, 10, 10};
colors = {[1, 0, 0], [0, 0, 1], [0, 0, 0], [0.7071, 0, 0.7071]};
styles = {'^', 's', 'x', '+'}

scatter_series_set(x_vals, y_vals, sizes, colors, styles);

legend(names, 'location', 'southeast');

Пример кода создает следующий график:

Scatter plot generated by the example code.

0 голосов
/ 18 мая 2011

Для меня работает следующее:

n = 100;
x = randn(n, 1);
y = randn(n, 1);
S = rand(n, 1)*20;
hold on
scatter(x(1:50), y(1:50), S(1:50), "red", "filled")
scatter(x(51:100), y(51:100), S(51:100), "green", "filled")
hold off
print('-depsc', 'bubbleplot.eps');

enter image description here

Однако я не могу добавить легенду и не нашел ни сообщения об ошибке, ни указаниянедостающей функциональности для этого.Поэтому в качестве альтернативы я бы предложил добавить маркер и текст к вашему графику.

...