2016-06-11 3 views
0

Если a = columns, b = rows и c = intensity. Как я могу создать образ размеров a по b и для каждого пикселя, чтобы иметь интенсивность c:Matlab: Создание контурных карт/изображений, аналогичных SigmaPlot

В SigmaPlot, чтобы создать 29x4 изображение, a, b и c отформатированы следующим образом, как можно данные отформатирован в Matlab для достижения аналогичных результатов:

[a, b, c] = 

1 1 0 
2 1 0 
3 1 0 
4 1 0 
5 1 0 
6 1 360.389854270598 
7 1 524.553377941978 
8 1 587.550618428821 
9 1 535.164504523392 
10 1 494.350943153525 
11 1 509.366595359498 
12 1 541.550829317582 
13 1 714.122144025010 
14 1 807.904727901154 
15 1 634.059149684754 
16 1 406.202488197581 
17 1 338.349519959103 
18 1 348.757723417053 
19 1 334.118680593247 
20 1 375.846361889047 
21 1 507.518116274100 
22 1 422.583478997748 
23 1 0 
24 1 0 
25 1 0 
26 1 0 
27 1 0 
28 1 0 
29 1 0 
1 2 0 
2 2 0 
3 2 0 
4 2 0 
5 2 0 
6 2 222.769016959765 
7 2 426.141970064050 
8 2 481.453912764027 
9 2 517.069153954465 
10 2 487.414455654141 
11 2 506.604099604784 
12 2 514.770604062499 
13 2 460.590220686965 
14 2 376.241099616609 
15 2 337.728227490832 
16 2 394.310238250583 
17 2 644.982641646965 
18 2 856.664806333676 
19 2 1040.69617779231 
20 2 1128.07830809176 
21 2 1070.24104109274 
22 2 850.891638429000 
23 2 489.144965506451 
24 2 0 
25 2 0 
26 2 0 
27 2 0 
28 2 0 
29 2 0 
1 3 0 
2 3 0 
3 3 0 
4 3 0 
5 3 0 
6 3 0 
7 3 337.875341290982 
8 3 446.387817855576 
9 3 505.667919278579 
10 3 474.666874694826 
11 3 404.395323496310 
12 3 345.514890319901 
13 3 367.942209080407 
14 3 450.883569030291 
15 3 507.808892555292 
16 3 498.203471996257 
17 3 501.711478584646 
18 3 518.354642382383 
19 3 596.694216569632 
20 3 591.347390565249 
21 3 622.610680837716 
22 3 667.944336239558 
23 3 445.858691175108 
24 3 0 
25 3 0 
26 3 0 
27 3 0 
28 3 0 
29 3 0 
1 4 0 
2 4 0 
3 4 0 
4 4 0 
5 4 0 
6 4 0 
7 4 216.608353008468 
8 4 375.475770667960 
9 4 425.565743597413 
10 4 380.722854551759 
11 4 317.194831801482 
12 4 337.830175882681 
13 4 352.530658493000 
14 4 352.286503054898 
15 4 323.117595263304 
16 4 289.104540650745 
17 4 259.229945714487 
18 4 233.527214821773 
19 4 137.305656551259 
20 4 1418.69232849777 
21 4 1055.72415597513 
22 4 818.007236956091 
23 4 595.146860875435 
24 4 363.440841935283 
25 4 0 
26 4 0 
27 4 0 
28 4 0 
29 4 0 

ответ

1

кажется, существует несоответствие в определении данных: вы определяете

  • a в качестве столбцов (в пределах от 1 до 29)
  • b как строки (в пределах от 1 до 4)
  • , тем не менее, вы относитесь к 29 x 4 матрице, в то время как она должна быть 4 x 29

часть из этого, вы должны сначала переставить определение входных данных следующим образом:

abc=[ 
1 1 0 
2 1 0 
3 1 0 
4 1 0 
5 1 0 
6 1 360.389854270598 
7 1 524.553377941978 
8 1 587.550618428821 
... 
all the other data 
... 
] 

, который должен включать их в [].

Тогда вы можете:

  • извлечь данные intensity (которые находятся в третьей колонке abc матрицы
  • использовать функцию reshape для преобразования intensity массива в матрицу
  • «автоматически» данные x и y с использованием функции unique
  • получите число строк и столбцов, используя length функция
  • использовать функцию meshgrid для создания XY сетки, над которой участок поверхности

На данный момент вы можете:

  • использовать функцию surf для построения 3D поверхности (z значения будут intensity)
  • создать плоскую поверхность и использовать данные intensity как «цвет»
  • использовать функцию contour для построения 2D контур участка
  • использовать функцию contour3 для построения 3D-контур участка

Это решение может быть реализовано следующим образом (где abc это ваш полный набор данных):

% Get the intensity data 
intensity=abc(:,3); 
% Get the x and y data 
row_data=unique(abc(:,1)); 
col_data=unique(abc(:,2)); 
n_row=length(row_data); 
n_col=length(col_data); 

% Reshape the intensity data to get a 29x4 matrix 
z=reshape(intensity,n_row,n_col); 
% Create the grid to plot the surface 
[X,Y]=meshgrid([1:n_col],[1:n_row]) 

% Plot a 3D surface 
figure 
surf(X,Y,z) 
shading interp 
colorbar 

% Plot a flat surface with 
figure 
% Create a "dummy" zeros matrix to plot a flat surface 
Z=zeros(size(X)); 
surf(X,Y,Z,z) 
shading interp 
colorbar 

% Plot a 2D contour 
figure 
[c,h] = contour(z); 
clabel(c,h) 
colorbar 

% Plot a 3D contour 
figure 
[c,h] = contour3(z); 
clabel(c,h) 
colorbar 

enter image description here

enter image description here

enter image description here

enter image description here Надеюсь, это поможет.

Qapla '

+0

Спасибо, это отлично. Есть ли способ построить плоскую поверхность, используя 2d вместо 3D-графика. Кроме того, как я могу изменить шкалу шкалы (добавить ограничения и т. Д.) – Mosawi

+1

Чтобы построить плоскую поверхность на осях «2D», вы можете вручную повернуть поверхность с помощью «поворотного инструмента» на панели инструментов фигуры или непосредственно установить viewpoit, используя функцию [view function] (http://uk.mathworks.com/help/matlab/ref/view.html) как 'view ([0 90])'. Ваш второй вопрос (о _amend scale bar_ неясно, чего вы хотите достичь? –

+0

Спасибо, я имел в виду, что я хочу установить предел на шкале вместо максимального значения, являющегося пределом (который иногда может быть аномалией) . Наибольшее значение на шкале задается max (ZData), я хочу, чтобы пользователь выбирал, что это за значение. Надеюсь, я понятен. – Mosawi

Смежные вопросы