Как перемасштабировать векторное поле на другую сетку? - PullRequest
0 голосов
/ 04 июля 2019

В настоящее время у меня есть векторное поле, которое выглядит примерно так, сгенерированное со следующей базовой структурой, где Z - некоторая матрица:

[X,Y] = meshgrid(x,y)

[grad_x, grad_y] = gradient(Z)

quiver(X,Y,grad_x,grad_y)

enter image description here

Я бы хотел, чтобы этот график был изменен таким образом, чтобы ось x составляла от 1,5 до 3,8, а ось Y - от 100 до 250, но чтобы сами стрелки выглядели одинаково.Единственным отличием на рисунке должны быть метки осей.

Я пытался:

grad_x_rescaled = [(grad_x - min(grad_x))./(max(grad_x)-min(grad_x))].*(3.8-1.5);
grad_y_rescaled = [(grad_y - min(grad_y))./(max(grad_y)-min(grad_y))].*(250-100);

Но проблема в том, что хотя grad_x и grad_y масштабируются в целом, масштабирование самих стрелок относительно друг друга не сохраняется, ирезультаты приведены ниже (обратите внимание, что толстые черные полосы предположительно являются наконечниками стрел, но важно то, что направление и относительные размеры стрелок не совсем такие, как в первом случае. enter image description here

Существует ли функция matlab или выражение для перенормировки данных в новый диапазон, но такие, что перенормированные данные масштабируются относительно себя (например, стрелки должны масштабироваться одинаково по отношению друг к другу)?

1 Ответ

1 голос
/ 04 июля 2019

Чтобы просто поменять метки тиков на осях, вы можете использовать способность Matlab для определения меток и меток .По сути, вы просто скажете Matlab, куда ставить галочки и что на этикетках должно быть написано так:

xticks(linspace(0,1,6))
xticklabels(linspace(1.5,3.8,6))
yticks(linspace(0,1,6))
yticklabels(linspace(100,250,6))    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...