Почему моя фигура выглядит анимированной (а не должна)?
Рассмотрим следующий код, который рисует фигуру:
figure('Renderer', 'opengl');
N = 50;
tL = linspace(0.5, 6, N).';
tB = sort(randi(100,N,20),1);
yyaxis right; plot(tL, tB);
xlim([2 6]);
Когда я запускаю этот код, я получаю часто посещаемую фигуру с движущимися линиями, которая должна быть статической, например (эта использует мои реальные данные, которые выглядят немного лучше, чем в примере):
Несколько дополнительных наблюдений:
- Я заметил, что без
xlim
линии ничего не происходит (т.е. фигура статична, как и ожидалось). - Я не смог заставить его работать на другом компьютере с той же версией MATLAB.
- Строка "анимация", похоже, совпадает с появлением и исчезновением панели инструментов осей (справа вверху с увеличением и т. Д.).
- Когда я создаю фигуру, используя
figure('Renderer', 'painters')
этого не происходит
Может кто-нибудь объяснить, почему это происходит? Это документированное поведение? Есть идеи, как это контролировать?
Я работаю с R2018b на Windows 10 v1803. Мои экраны подключены к встроенному графическому процессору Intel HD Graphics 530 (версия драйвера 22.20.16.4749).
0 ответов
- Во-первых, вы должны понимать, что фигура - это вовсе не статичная картинка. Он часто обновляется. Если изменить размер / переместить контейнер (рисунок), фигура будет перерисована сразу после взаимодействия.
- Во-вторых, все объекты, включая линии, аннотации, легенды..., перерисовываются одновременно. Типы прерывистых линий будут легко зафиксированы. Вот почему вы могли увидеть "анимированную" пунктирную линию.
- Наконец, для Matlab есть некоторые различия во взаимодействии в Linux/Mac и Windows. В Windows перемещение мыши на рисунке не запускает событие отслеживания данных. Но в Linux Data Tracker будет активирован при движении мыши. События для отслеживания данных, выбора объекта и т. Д. Обновят график.
В общем, "анимация", которую вы видите, разработана автором, и так и должно быть.
Следующий код отключил видимость проверки попадания для текущих осей, поэтому событие перерисовки не будет запускаться во время перемещения мыши или щелчка по осям. Но с событием изменения размера все объекты должны быть перерисованы (что было специально разработано).
figure('Renderer', 'opengl');
N = 50;
tL = linspace(0.5, 6, N).';
tB = sort(randi(100,N,20),1);
yyaxis right; h = plot(tL, tB,'ButtonDownFcn',@lineCallback);
set(gca,'HitTest','off')
xlim([2 6]);
function lineCallback(Figure1,Structure1)
disp('Button Down: redraw...');
end
Этот фрагмент кода был протестирован с использованием MATLAB R2018B на Mac,window10 и Ubuntu 18.04. Все работает штрафы.