我有一个大小为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中有一个简单的方法吗?
感谢您的帮助。
答案 0 :(得分:2)
MATLAB axes
对象具有惊人的'ColorOrder'
属性,可控制您添加的绘图颜色。默认颜色顺序只有7种颜色,如下所示:
(来源: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)
答案 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矩阵。