У меня есть ряд 3 наборов данных, которые я хочу вывести на печать в MATLAB, но 'x' ось, я хочу дать в форме круга вместо прямой нижней строки. Какая-либо идея о том, как сделать это?
График в качестве примера:
Нормальная команда для графического изображения в MATLAB plot(x, data1, x data2, x, data3)
, в этом ось X взята в качестве прямой линии. Я хочу ось X, взятую в качестве круга. Делает любой знает команду для него.
Вы можете найти здесь все доступные функции MATLAB 2-D и 3-D для построения графиков.
Можно использовать более сжатый стандартный синтаксис типа кортежа вместо 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
самостоятельно, я не уверен, если вы ищете что-то другое здесь.
В заголовке HTML-документа:
<link rel="stylesheet" type="text/css" href="/path/to/ABCD.css">
CSS-файл должен быть только CSS и не содержать разметки.
-121--1339660- @ Алок спрашивает, хотите ли вы полярный график. Я говорю вам, что вы хотите полярный сюжет! См. документацию Matlab для функции polar ()
и ее отношений, таких как cart2pol
. В зависимости от ваших точных требований (я не следовал вашей ссылке) вы можете найти относительно легко или довольно трудно произвести именно тот сюжет, который вы хотите.
Извините, если это может быть неправильным ответом на ваш вопрос (у вас его уже достаточно). Недавно я нашел очень мощный инструмент для построения диаграмм по кругу - CIRCOS: http://mkweb.bcgsc.ca/circos/ Взгляните, фигуры действительно потрясающие. Он не из Матлаба, а из Перла, и он бесплатный. Может быть, вам это пригодится.
Ниже приведен полный пример, показывающий, как сопоставить данные с линейной осью. в круг.
Я показываю два способа достижения цели:
Основная идея: если у вас есть серия 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, '-');
%# 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
%# 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
Я должен упомянуть, что 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