Привет
Я хочу представить данные с двумя переменными (широтой и долготой) в формате 2D.Значение представлено цветом и 2 переменными в виде оси 2, и я использую функцию contourf для построения моих данных.Все данные поступают из файла xlsx, и я помещаю его в матрицу.
Locations = xlsread('Availability results.xlsx');
column_numberloc = 1; % Column in the locations file containing the number of the locations
column_latitude = 2; % Column in the locations file containing the latitude of the locations
column_longitude = 3; % Column in the locations file containing the longitude of the locations
column_availability = 4; % Column in the locations file containing the availability of the locations
min_latitude = min(Locations(:,column_latitude));
max_latitude = max(Locations(:,column_latitude));
min_longitude = min(Locations(:,column_longitude));
max_longitude = max(Locations(:,column_longitude));
max_availability = max(Locations(:,column_availability));
min_availability = min(Locations(:,column_availability));
longitude = Locations(:,column_longitude);
latitude = Locations(:,column_latitude);
Contour = zeros(23,17);
for numerofile=1:204
[coord_x,coord_y] =transformation(Locations(numerofile,column_latitude),Locations(numerofile,column_longitude));
Contour(coord_x,coord_y) = Locations(numerofile,column_availability);
end
for i=1:23
for j=1:17
if Contour(i,j) == 0
Contour(i,j) = NaN;
end
end
end
cMap=jet(256);
figure(1);
x = linspace(min_longitude,max_longitude,17);
y = linspace(min_latitude,max_latitude,23);
newpoints = 100;
[xq,yq] = meshgrid(linspace(min(x),max(x),newpoints),linspace(min(y),max(y),newpoints ));
Contourq = interp2(x,y,Contour,xq,yq,'linear',max_availability);
[c,h]=contourf(xq,yq,Contourq,100);
%[c,h]=contourf(x,y,Contour,50);
set(h, 'edgecolor','none');
colormap(cMap);
cb=colorbar;
caxis([min_availability max_availability]);
Функция преобразование позволяет мне поместить все данные в матрицу Contour, поскольку она связывает долготуи широта для строки и столбца.
Я поместил NaN для всех данных, равных нулю, чтобы лучше рассмотреть мои данные, и я получил это: interpolation_linear
Это хорошо, но я хотел, чтобы эти данные были близки к: Без интерполяции
Итак, я решил изменить линейную интерполяцию на «ближайшую» интерполяцию и я получил это: interpolation_nearest
Я могу видеть больше данных, но контурный график не такой гладкий , как при линейной интерполяции.
Я видел много постов о том, как сделать гладкий контурный график (именно так я нашел функцию 'interp2'), но я думаю, что моя проблема связана с данными NaN, которые мешают мне иметь гладкий контурный график на границе междуNaN васиние и остальные, как на первом изображении, но с достаточным количеством данных, например на третьем.
Мой вопрос: знаете ли вы , как получить график с гладким контуром с достаточным количеством данных благодаряближайшая интерполяция, но с хорошим изображением, похожим на первое изображение?
Большое спасибо