Я прочитал сообщение в блоге о назначении прозрачности для сюжетные маркеры. Я попробовал код на простом примере, и все было хорошо. Затем я попробовал замкнутый цикл, рисуя по одной точке за раз (делая это, чтобы назначить разный цвет каждой точке на графике), и неизменно в течение нескольких циклов циклов, когда я хватаю «plothandle.MarkerHandle», он пуст. . В этих случаях класс этого пустого объекта — Matlab.graphics.GraphicsPlaceholder
, а при успешном выполнении операции — класс: matlab.graphics.primitive.world.Marker
Далее следует основной цикл. colormatrix
назначает цвет [r,g,b] каждой точке данных.
hold on
opacity = 0.5;
for jk = 1:numel(idx
tmph = plot(foox(jk),fooy(jk),'o','color',colormatrix(jk,:) );
tmpk = tmph.MarkerHandle;
tmpk.FaceColorData = uint8(double(tmpk.EdgeColorData).* [1,1,1,opacity]');
tmpk.EdgeColorData = uint8(double(tmpk.EdgeColorData).* [1,1,1,opacity]');
end
Я пробовал такие вещи, как очистка переменных в каждом цикле, установка таймера задержки и т. д., но безуспешно. Я использую Matlab R2015a.
РЕДАКТИРОВАТЬ: вот простой пример. Что я похоже обнаружил, так это то, что если я запускаю весь сценарий, он всегда терпит неудачу. Если я разобью его на две части, где отмечено, и выполню второй раздел отдельным нажатием клавиши (ctrl-enter или selectall/F9 в редакторе IDE), все работает. И да, я знаю, что «недокументированные функции» рискованны, но поскольку MathWorks до сих пор не понял, что разрешение прозрачности и присвоение индексированных цветов — это хорошо для функции plot
, я все еще ищу лучший обходной путь, чем использование patch
для рисования каждой точки данных.
figure
xfoo = 1:10;
yfoo = 2*xfoo;
tmph = plot(xfoo,yfoo,'p','color',[1,0,1]);
hold on
opacity = 0.7;
% wait a while here.
tmpk = tmph.MarkerHandle;
tmpk.FaceColorData = uint8(double(tmpk.EdgeColorData).*[1,1,1,opacity]');
tmpk.EdgeColorData = uint8(double(tmpk.EdgeColorData).*[1,1,1,opacity]');