Я хочу создать график контура / поверхности, который показывает значения в ячейках, аналогичный карте настройки EFI

#matlab #matrix #plot #contour #surface

#matlab #матрица #график #контур #Поверхность

Вопрос:

Я хочу сделать что-то подобное в MATLAB. Это карта, которая имеет x y ось и и значение для z оси с цветом для величины z значения. По сути, это счетная карта, которая выводит значения в матрице на экран

Примерный график: введите описание изображения здесь

Ответ №1:

Изменение imagesc() графика

Вот что-то, что может быть достаточно похожим, изменив imagesc график с помощью текстовых аннотаций и line() функции для создания сетки. Для правильной настройки графика необходимо выполнить некоторые атрибуты оси, включая замену оси. К сожалению, это не очень краткий способ сделать это, но он может удовлетворить ваше приложение.

График Imagesc

 Engine_Load = [0.35 0.55 0.7 0.87 1 1.15 1.25 1.35 1.45 1.6 1.7 1.8 2 2.2 2.5];
Engine_Speed = (800:400:7600);

%Creating random test data%
[Engine_Load_Grid,Engine_Speed_Grid] = meshgrid(Engine_Load,Engine_Speed);
Estimated_Air_Fuel_Ratio = rand(length(Engine_Speed),length(Engine_Load));

%Creating the grid structure%
X_Axis = (1:length(Engine_Load));
Y_Axis = (1:length(Engine_Speed));
[X_Grid,Y_Grid] = meshgrid(X_Axis,Y_Axis);

clf;
imagesc('XData',X_Axis,'YData',Y_Axis,'CData',Estimated_Air_Fuel_Ratio);
xticks(1:1:length(X_Axis));
yticks(1:1:length(Y_Axis));
xlim([0.5 length(X_Axis) 0.5]);
ylim([0.5 length(Y_Axis) 0.5]);
Current_Axis = gca;
Current_Axis.XAxisLocation = 'Top';
grid on;

for Horizontal_Lines = 1: length(yticks)
line([0.5 length(X_Axis) 0.5],[Horizontal_Lines 0.5 Horizontal_Lines 0.5],'color','w','LineWidth',2);
end

for Vertical_Lines = 1: length(yticks)
line([Vertical_Lines 0.5 Vertical_Lines 0.5],[0.5 length(Y_Axis) 0.5],'color','w','LineWidth',2);
end

Estimated_Air_Fuel_Ratio = flip(Estimated_Air_Fuel_Ratio);
[Matrix_Height,Matrix_Width] = size(Estimated_Air_Fuel_Ratio);
for Row_Index = 1: Matrix_Height
    for Column_Index = 1: Matrix_Width
        
    text(Column_Index,Matrix_Height 1-Row_Index,num2str(Estimated_Air_Fuel_Ratio(Row_Index,Column_Index)));
    
    end
end

Current_Figure = gcf;
set(findall(gcf,'type','text'),'HorizontalAlignment','center')
set(Current_Axis,'xtick',X_Axis,'xticklabel',Engine_Load);
set(Current_Axis,'ytick',Y_Axis,'yticklabel',Engine_Speed);
xlabel('Engine Load'); ylabel('Engine Speed');
colorbar

Current_Figure.Position = [0 0 1000 1000];
 

Запускался с использованием MATLAB R2019b

Комментарии:

1. классное спасибо! Я могу попробовать упаковать этот код в некоторую функцию для моего будущего использования. вы написали это сами? И он не будет работать на моем matlab r2015a, но я буду обновляться до MATLAB r2020, и это должно сработать.

2. Да, я сам это написал. R2020 должен сделать свое дело, я не уверен, в какой версии были реализованы все функции, которые я использовал. Хороший план упаковать все это в функцию.