如何以不同颜色绘制单元格的所有元素?

时间:2016-01-06 04:06:33

标签: matlab plot

我有一个大小为8的单元格,具有以下结构:

 Columns 1 through 4

    [172x3 double]    [53x3 double]    [70x3 double]    [57x3 double]

  Columns 5 through 8

    [55x3 double]    [43x3 double]    [104x3 double]    [46x3 double]

每个单元格元素都是一个包含每行3D点的矩阵。我想在同一个图上绘制每个单元格元素,但是使用不同的颜色。在MATLAB中有一个简单的方法吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

MATLAB axes对象具有惊人的'ColorOrder'属性,可控制您添加的绘图颜色。默认颜色顺序只有7种颜色,如下所示:

color order(来源:Mathworks

您可以将整个颜色顺序设置为不同的颜色顺序,或者只添加例如黑色作为最后的颜色:

fig = figure(1);
ax = axes;
set(ax, 'ColorOrder', [get(ax,'ColorOrder'); 0,0,0])

现在您可以将hold设置为开启,这样您就可以多次调用plot并保留当前的地块:

hold(ax, 'on')

最后使用plot3'.'选项绘制数据,该选项仅绘制点,而不绘制线条。您可以在for循环中执行此操作,甚至可以更简单地使用cellfun为每个单元格调用plot3

cellfun(@(x) plot3(x(:,1), x(:,2), x(:,3), '.'), myCell)

就是这样。一个小例子:

% Create sample data
myCell = {0.1*randn(100,3), 0.1*randn(100,3)+[zeros(100,1),ones(100,1),zeros(100,1)],...
    0.1*randn(100,3)+[ones(100,1),zeros(100,1),zeros(100,1)], 0.1*randn(100,3)+[ones(100,1),ones(100,1),zeros(100,1)],...
    0.1*randn(100,3)+[zeros(100,1),zeros(100,1),ones(100,1)], 0.1*randn(100,3)+[zeros(100,1),ones(100,1),ones(100,1)],...
    0.1*randn(100,3)+[ones(100,1),zeros(100,1),ones(100,1)], 0.1*randn(100,3)+[ones(100,1),ones(100,1),ones(100,1)]}

% Plot
fig = figure(1);
ax = axes;
set(ax, 'ColorOrder', [get(ax,'ColorOrder'); 0,0,0])
hold(ax, 'on')
cellfun(@(x) plot3(x(:,1), x(:,2), x(:,3), '.'), myCell)

result

答案 1 :(得分:0)

另一种可能性是使用MATLAB提供的调色板。例如

myCell = {0.1*randn(100,3), 0.1*randn(100,3)+[zeros(100,1),ones(100,1),zeros(100,1)],...
0.1*randn(100,3)+[ones(100,1),zeros(100,1),zeros(100,1)], 0.1*randn(100,3)+[ones(100,1),ones(100,1),zeros(100,1)],...
0.1*randn(100,3)+[zeros(100,1),zeros(100,1),ones(100,1)], 0.1*randn(100,3)+[zeros(100,1),ones(100,1),ones(100,1)],...
0.1*randn(100,3)+[ones(100,1),zeros(100,1),ones(100,1)], 0.1*randn(100,3)+[ones(100,1),ones(100,1),ones(100,1)]}


col = jet(length(myCell))

for i=1:length(myCell)
    plot3(myCell{i}(:,1),myCell{i}(:,2),myCell{i}(:,3), 'Color', col(i,:), 'LineStyle', '.')
    hold on
end

如果需要特定颜色,可以手动输入col矩阵。