在我提出这个问题之前,我经常搜索。我尝试了几种方法,用了几个小时,但我无法解决这个简单的问题。你应该知道,我是Matlab的初学者。
这些数据是x和y位置,由RFID阅读器测量,我想用不同的颜色绘制它们。我在测量过程中使用了8个RFID标签,因此我有8个固定点 - 这些标记用' *'标记,因此我想使用8种(RGB)颜色而不是7种基本颜色。我在Matlab中写了这个并且它工作正常,但只有7种基本颜色,所以2个数据集具有相同的颜色。
close all
clc
RealPOSX=[40 31 0 -31 -40 -32 0 +31];RealPosY=[0 27 40 27 0 -27 -40 -27]
RealTagID=['A3 ' ;'A1 ' ; '9F ' ;'9D ' ; '9B ' ; 'A9 ' ; 'A7 ' ; 'A5 ' ];
for i=1:length(XLocalization)
temp=Epc{i};
ID(i,:)=temp(end-2:end);
end
colorsR=['b*'; 'g*'; 'r*' ;'k*' ;'c*'; 'y*' ;'m*' ;'k*']
colorsR2=['bo'; 'go'; 'ro' ;'ko' ;'co'; 'yo' ;'mo' ;'ko']
for i =1: length(RealPOSX)
idx = all(ismember(ID,RealTagID(i,:)),2)
pos=find(idx==1);
POS{i}=pos;
plot(RealPOSX(i),RealPosY(i),colorsR(i,:))
hold on
plot(XLocalization(POS{i}),Ylocalization(POS{i}),colorsR2(i,:))
end
grid on
在我看来,最简单的方法是改变颜色类型 - 这是第一次,我尝试过:
colorsR=['[0 0 0]*'; '[0 1 0]*'; '[1 0 0]*' ;'[0 0 0]*' ;'[0 1 1]*'; '[1 1 0]*' ;'[1 0 1]*' ;'[0.5 0.5 0]*']
colorsR=['[0 0 0]o'; '[0 1 0]o'; '[1 0 0]o' ;'[0 0 0]o' ;'[0 1 1]o'; '[1 1 0]o' ;'[1 0 1]o' ;'[0.5 0.5 0]o']
但当然它没有用。
修改:
我现在更改了代码,就像@Wolfie建议的那样。
现在看起来像这样:
新代码:
close all
clc
RealPOSX=[40 31 0 -31 -40 -32 0 +31];
RealPosY=[0 27 40 27 0 -27 -40 -27];
RealTagID=['A3 ' ,'A1 ' , '9F ' ,'9D ' , '9B ' , 'A9 ' , 'A7 ' , 'A5 ' ];
for i=1:length(XLocalization)
ID(i,:)=Epc{i}(end-2:end);
end
colorsR = {[0 0 0], [0 1 0], [1 0 0], [0 0.5 0.5], [0 1 1], [1 1 0], [1 0 1], [0.5 0.5 0]};
for i =1: length(RealPOSX)
pos = find(ismember(RealTagID,'AA'));
% WHAT IS THIS 'AA'?
hold on
plot(RealPOSX(i),RealPosY(i), 'Color', colorsR{i}, 'Marker', '*') % It's working properly
plot(XLocalization(pos),Ylocalization(pos), 'Color', colorsR{i}, 'Marker', 'o')
hold off
end
grid on
这是我的变数。我希望你能达到它。 My variables
答案 0 :(得分:0)
我不知道你的所有变量是什么,所以我不知道这是否会解决所有问题,但这是代码细分:
评论解释变化
% Remember to end lines with ";" to suppress outputs
RealPOSX=[40 31 0 -31 -40 -32 0 31];
RealPosY=[ 0 27 40 27 0 -27 -40 -27];
% Doing this:
% RealTagID=['A3 ' ;'A1 ' ; '9F ' ;'9D ' ; '9B ' ; 'A9 ' ; 'A7 ' ; 'A5 ' ];
% is not the best way to store strings.
% Instead, use a cell to keep strings separate and make indexing easier
RealTagID={'A3', 'A1', '9F', '9D', '9B', 'A9', 'A7', 'A5'};
for i = 1:length(XLocalization)
% Depending on what is stored in Epc, you may not need temp.
% It would be more concise to do ID{i}=Epc{i}(end-2:end);
temp = Epc{i};
ID{i}=temp(end-2:end);
end
% Same note as above about cells
colorsR ={'b*', 'g*', 'r*', 'k*', 'c*', 'y*', 'm*', 'k*'};
colorsR2={'bo', 'go', 'ro', 'ko', 'co', 'yo', 'mo', 'ko'};
for i =1:length(RealPOSX)
%idx = all(ismember(ID,RealTagID(i,:)),2)
%pos=find(idx==1);
%POS{i}=pos;
%You can get pos more simply:
pos = find(ismember(RealTagID,ID{i}));
%POS{i} = pos
% But you're using POS{i} immediately so why store it at all?
% you should just hold on around your plotting, and hold off after
hold on
plot(RealPOSX(i), RealPosY(i), colorsR{i})
plot(XLocalization(pos), Ylocalization(pos), colorsR2{i})
hold off
end
grid on
至于实际使用RGB颜色绘图,您应该在循环中使用它:
colorsR = {[0 0 0], [0 1 0], [1 0 0], [0 0 0], [0 1 1], [1 1 0], [1 0 1], [0.5 0.5 0]};
plot(XValues, YValues, 'Color', colorsR{i}, 'Marker', '*')