Это скорее иллюстрированный комментарий, чем ответ, но поскольку @hagubear упомянул ваш индекс i
, это бессмысленно, поэтому вы можете полностью удалить его.
Использование set(handle(my_numbers,1),'facecolor','g')
удалит эту ошибку, поскольку вы пытаетесь получить доступ к handles(j(2),1)
, и это невозможно, потому что j
- это скаляр.
Во всяком случае, используя эту линию после того, как ваш график работает отлично:
set(handle(my_numbers,1),'facecolor','g')
Согласно вашему комментарию ниже, здесь это способ вызвать функцию несколько раз и добавить зеленые прямоугольники, как вы идете вперед. Есть 2 файла с целью демонстрации, функция сама по себе и скрипт для вызова функции несколько раз и генерировать анимированного GIF:
1) Функция:
function marks(my_numbers)
%// Get green and red rectangles to access their properties.
GreenRect = findobj('Type','rectangle','FaceColor','g');
RedRect = findobj('Type','rectangle');
%// If 1st call to the function, create your plot
if isempty(RedRect)
handle = zeros(5,1);
x = 10 ;
y = 10:20:100 ;
for j = 1:5 ;
handle(j) = rectangle('position',[x,y(j),20 10],'facecolor','r');
end
set(handle(my_numbers,1),'facecolor','g')
%// If not 1st call, fetch existing green rectangles and color them green. Then color the appropriate rectangle given by my_numbers.
else
RedRect = flipud(RedRect); %// Flip them to maintain correct order
if numel(GreenRect) > 0
hold on
for k = numel(GreenRect)
set(GreenRect(k),'facecolor','g')
set(RedRect(my_numbers,1),'facecolor','g')
end
end
end
2) Сценарий:
clear
clc
%// Shuffle order for appearance of green rectangles.
iter = randperm(5);
filename = 'MyGifFile.gif';
for k = iter
marks(k)
pause(1)
frame = getframe(1);
im = frame2im(frame);
[imind,cm] = rgb2ind(im,256);
if k == iter(1)
imwrite(imind,cm,filename,'gif', 'Loopcount',inf);
else
imwrite(imind,cm,filename,'gif','WriteMode','append');
end
end
Вот анимированный GIF выхода:
Ваш индекс i является своего рода бессмысленным - исправить его как 1. x = 10, так зачем вам нужно x (i)? Распечатайте точное сообщение об ошибке с консоли. Кроме того, цвета, вероятно, должны быть 20, 10, не 20 10. – ha9u63ar