Matlab: создание контурных карт / изображений, похожих на SigmaPlot
Если a = columns
, b = rows
а также c = intensity
, Как я могу создать изображение размеров a
от b
и для каждого пикселя иметь интенсивность c
:
В 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
матрица - используйте функцию изменения формы для преобразования
intensity
массив в матрицу - "автоматически"
x
а такжеy
данные с помощьюunique
функция - получить номер строки и столбца, используя функцию длины
- используйте функцию сетки для генерации
XY
сетка, по которой строится поверхность
На данный момент вы можете:
- использовать функцию прибоя для построения трехмерной поверхности (
z
значения будутintensity
данные) - создать плоскую поверхность и использовать
intensity
данные как "цвет" - использовать функцию контура для построения двухмерного контурного графика
- используйте функцию contour3 для построения трехмерного контурного графика
Это решение может быть реализовано следующим образом (где 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
Qapla"