Как вывестись на печать в кругу вместо оси прямой линии в Matlab?

У меня есть ряд 3 наборов данных, которые я хочу вывести на печать в MATLAB, но 'x' ось, я хочу дать в форме круга вместо прямой нижней строки. Какая-либо идея о том, как сделать это?

График в качестве примера:

alt text

Нормальная команда для графического изображения в MATLAB plot(x, data1, x data2, x, data3), в этом ось X взята в качестве прямой линии. Я хочу ось X, взятую в качестве круга. Делает любой знает команду для него.

5
задан Glorfindel 12 June 2019 в 07:05
поделиться

4 ответа

Вы можете найти здесь все доступные функции MATLAB 2-D и 3-D для построения графиков.

4
ответ дан 18 December 2019 в 09:49
поделиться

Можно использовать более сжатый стандартный синтаксис типа кортежа вместо Tuple2 :

val min = list.min(new Ordering[(String, Int)] { 
  def compare(x: (String, Int), y: (String, Int)): Int = x._2 compare y._2 
})

Или используйте reduceLeft, чтобы иметь более краткое решение в целом:

val min = list.reduceLeft((a, b) => (if (a._2 < b._2) a else b))

Или вы могли сортировать список по своему критерию и стать первыми элемент (или последний для макс.):

val min = list.sort( (a, b) => a._2 < b._2 ).first

Которая может быть дополнительно сокращена с помощью синтаксиса местозаполнителя:

val min = list.sort( _._2 < _._2 ).first

Которая, как вы сами написали, может быть сокращена до:

val min = list.sortBy( _._2 ).first

Но, как вы предложили sortBy самостоятельно, я не уверен, если вы ищете что-то другое здесь.

-121--1370740-

В заголовке HTML-документа:

<link rel="stylesheet" type="text/css" href="/path/to/ABCD.css">

CSS-файл должен быть только CSS и не содержать разметки.

-121--1339660-

@ Алок спрашивает, хотите ли вы полярный график. Я говорю вам, что вы хотите полярный сюжет! См. документацию Matlab для функции polar () и ее отношений, таких как cart2pol . В зависимости от ваших точных требований (я не следовал вашей ссылке) вы можете найти относительно легко или довольно трудно произвести именно тот сюжет, который вы хотите.

7
ответ дан 18 December 2019 в 09:49
поделиться

Извините, если это может быть неправильным ответом на ваш вопрос (у вас его уже достаточно). Недавно я нашел очень мощный инструмент для построения диаграмм по кругу - CIRCOS: http://mkweb.bcgsc.ca/circos/ Взгляните, фигуры действительно потрясающие. Он не из Матлаба, а из Перла, и он бесплатный. Может быть, вам это пригодится.

1
ответ дан 18 December 2019 в 09:49
поделиться

Ниже приведен полный пример, показывающий, как сопоставить данные с линейной осью. в круг.

Я показываю два способа достижения цели:

  • первый, когда три ряда данных перекрываются (т. Е. Все отображаются в один и тот же диапазон)
  • , другой вариант - рисовать их наложенными друг на друга (в разных соседних диапазонах)

​​Основная идея: если у вас есть серия D , то сопоставьте точки с кругом, радиус которого равен значениям данных, используя:

theta = linspace(0, 2*pi, N);    %# divide circle by N points (length of data)
r = data;                        %# radius
x = r.*cos(theta);               %# x-coordinate
y = r.*sin(theta);               %# y-coordinate
plot(x, y, '-');

Вариант 1

%# some random data
K = 3;
N = 30;
data = zeros(K,N);
data(1,:) = 0.2*randn(1,N) + 1;
data(2,:) = 0.2*randn(1,N) + 2;
data(3,:) = 0.2*randn(1,N) + 3;

center = [0 0];                        %# center (shift)
radius = [data data(:,1)];             %# added first to last to create closed loop
radius = normalize(radius',1)'+1;      %# normalize data to [0,1] range

figure, hold on

%# draw outer circle
theta = linspace(5*pi/2, pi/2, 500)';  %# 'angles
r = max(radius(:));                    %# radius
x = r*cos(theta)+center(1);
y = r*sin(theta)+center(2);
plot(x, y, 'k:');

%# draw mid-circles
theta = linspace(5*pi/2, pi/2, 500)';  %# 'angles
num = 5;                               %# number of circles
rr = linspace(0,2,num+2);              %# radiuses
for k=1:num
    r = rr(k+1);
    x = r*cos(theta)+center(1);
    y = r*sin(theta)+center(2);
    plot(x, y, 'k:');
end

%# draw labels
theta = linspace(5*pi/2, pi/2, N+1)';    %# 'angles
theta(end) = [];
r = max(radius(:));
r = r + r*0.2;                           %# shift to outside a bit
x = r*cos(theta)+center(1);
y = r*sin(theta)+center(2);
str = strcat(num2str((1:N)','%d'),{});   %# 'labels
text(x, y, str, 'FontWeight','Bold');

%# draw the actual series
theta = linspace(5*pi/2, pi/2, N+1);
x = bsxfun(@times, radius, cos(theta)+center(1))';
y = bsxfun(@times, radius, sin(theta)+center(2))';
h = zeros(1,K);
clr = hsv(K);
for k=1:K
    h(k) = plot(x(:,k), y(:,k), '.-', 'Color', clr(k,:), 'LineWidth', 2);
end

%# legend and fix axes
legend(h, {'M1' 'M2' 'M3'}, 'location', 'SouthOutside', 'orientation','horizontal')
hold off
axis equal, axis([-1 1 -1 1] * r), axis off

option1

Вариант 2

%# some random data
K = 3;
N = 30;
data = zeros(K,N);
data(1,:) = 0.2*randn(1,N) + 1;
data(2,:) = 0.2*randn(1,N) + 2;
data(3,:) = 0.2*randn(1,N) + 3;

center = [0 0];                                %# center (shift)
radius = [data data(:,1)];                     %# added first to last to create closed loop
radius = normalize(radius',1)';                %# normalize data to [0,1] range
radius = bsxfun( @plus, radius, (1:2:2*K)' );  %# 'make serieson seperate ranges by addition

figure, hold on

%# draw outer circle
theta = linspace(5*pi/2, pi/2, 500)';   %# 'angles
r = max(radius(:))+1;                   %# radius
x = r*cos(theta)+center(1);
y = r*sin(theta)+center(2);
plot(x, y, 'k:');

%# draw mid-circles
theta = linspace(5*pi/2, pi/2, 500)';  %# 'angles
r = 1.5;                               %# radius
for k=1:K
    x = r*cos(theta)+center(1);
    y = r*sin(theta)+center(2);
    plot(x, y, 'k:');
    r=r+2;             %# increment radius for next circle
end

%# draw labels
theta = linspace(5*pi/2, pi/2, N+1)';    %# 'angles
theta(end) = [];
r = max(radius(:))+1;
r = r + r*0.2;                           %# shift to outside a bit
x = r*cos(theta)+center(1);
y = r*sin(theta)+center(2);
str = strcat(num2str((1:N)','%d'),{});   %# 'labels
text(x, y, str, 'FontWeight','Bold');

%# draw the actual series
theta = linspace(5*pi/2, pi/2, N+1);
x = bsxfun(@times, radius, cos(theta)+center(1))';
y = bsxfun(@times, radius, sin(theta)+center(2))';
h = zeros(1,K);
clr = hsv(K);
for k=1:K
    h(k) = plot(x(:,k), y(:,k), '.-', 'Color', clr(k,:), 'LineWidth', 2);
end

%# legend and fix axes
legend(h, {'M1' 'M2' 'M3'}, 'location', 'SouthOutside', 'orientation','horizontal')
hold off
axis equal, axis([-1 1 -1 1] * r), axis off

option2


Я должен упомянуть, что normalize () - это настраиваемая функция, она просто выполняет минимальную нормализацию ( (x-min) / (max-min) ), определенную как:

function newData = normalize(data, type)
    [numInst numDim] = size(data);
    e = ones(numInst, 1);
    minimum = min(data);
    maximum = max(data);
    range = (maximum - minimum);

    if type == 1
        %# minmax normalization: (x-min)/(max-min)   =>   x in [0,1]
        newData = (data - e*minimum) ./ ( e*(range+(range==0)) );
    end

    %# (...)
end
5
ответ дан 18 December 2019 в 09:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: