如何使用RGB颜色绘图

时间:2017-02-06 16:57:52

标签: matlab colors matlab-figure

在我提出这个问题之前,我经常搜索。我尝试了几种方法,用了几个小时,但我无法解决这个简单的问题。你应该知道,我是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建议的那样。

现在看起来像这样:

Figure 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)    
    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

1 个答案:

答案 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', '*')