Matlab 我需要帮助在同一绘图上以不同颜色绘制if/else命令的不同排列
基本上我有一个代码,它生成了成本和可靠性之间所有可能的排列图。总共有864个数据点被分成8行。其中五行有2个选项,其中三行有3个选项 这是我的代码副本。我试图让“其他相机”和“深度与结构测试”的排列与其他六种可能性的颜色不同。我尝试使用“gscatter”命令,但运气不太好 我相信我需要在if/else语句中使用scatter命令,尽管我不太确定在“scatter”命令的“X”和“Y”中绘制什么。目前,我的代码设置为以一种颜色打印所有数据。我用“gscatter”删除了我的代码,因为我遇到了很多错误,当我试图修复它们时,情节最终没有按计划进行Matlab 我需要帮助在同一绘图上以不同颜色绘制if/else命令的不同排列,matlab,if-statement,scatter-plot,pareto-chart,Matlab,If Statement,Scatter Plot,Pareto Chart,基本上我有一个代码,它生成了成本和可靠性之间所有可能的排列图。总共有864个数据点被分成8行。其中五行有2个选项,其中三行有3个选项 这是我的代码副本。我试图让“其他相机”和“深度与结构测试”的排列与其他六种可能性的颜色不同。我尝试使用“gscatter”命令,但运气不太好 我相信我需要在if/else语句中使用scatter命令,尽管我不太确定在“scatter”命令的“X”和“Y”中绘制什么。目前,我的代码设置为以一种颜色打印所有数据。我用“gscatter”删除了我的代码,因为我遇到了很多
% Pareto_Eval
baseline_cost = 45;
nrows = 8;
%Initialize Variables
for aa = 1:nrows
cost_delta(aa) = 0;
reliability(aa) = 1;
end
icount = 1;
%Propulsion
for row1 = 1:2
if row1 == 1
cost_delta(1)= -7;
reliability(1) = 0.995;
elseif row1==2
cost_delta(1)=0;
reliability(1)=.99;
end
%Entry Mode
for row2 = 1:2
if row2 == 1
cost_delta(2) = -3;
reliability(2) = .99;
else
cost_delta(2) = 0;
reliability(2) = .98;
end
%Landing Method
for row3 = 1:3
if row3 == 1 %if needs declaration
cost_delta(3)= 0;
reliability(3) = .99;
elseif row3 == 2 %elseif needs declaration
cost_delta(3) = 4;
reliability(3) = .995;
else %else does not need declaration
cost_delta(3) = -2;
reliability(3) = .95;
end
%Lander Type
for row4 = 1:3
if row4 == 1
cost_delta(4)= 10;
reliability(4) = .99;
elseif row4 == 2
cost_delta(4) = 0;
reliability(4) = .99;
else
cost_delta(4) = 15;
reliability(4) = .95;
end
%Rover Type
for row5 = 1:2
if row5 == 1
cost_delta(5)= -2;
reliability(5) = .98;
else
cost_delta(5) = 0;
reliability(5) = .975;
end
%Power Source
for row6 = 1:2
if row6 == 1
cost_delta(6) = -3;
reliability(6) = .95;
else
cost_delta(6) = 0;
reliability(6) = .995;
end
%Depth & Structure Testing
for row7 = 1:2
if row7 == 1
cost_delta(7) = 0;
reliability(7) = .99;
else
cost_delta(7) = 2;
reliability(7) = .85;
end
%Other Cameras
for row8 = 1:3
if row8 == 1
cost_delta(8)= -1;
reliability(8) = .99;
elseif row8 == 2
cost_delta(8) = -1;
reliability(8) = .99;
else
cost_delta(8) = 0;
reliability(8) = .9801;
end
cost_delta_total = 0;
reliability_product = 1;
for bb=1:nrows
cost_delta_total = cost_delta_total + cost_delta(bb);
reliability_product = reliability_product*reliability(bb);
end
total_cost(icount) = baseline_cost + cost_delta_total;
total_reliability(icount) = reliability_product;
icount = icount + 1;
end; end; end; %Rows 1,2,3
end; end; end; %Rows 4,5,6
end; end; %Rows 7,8
%Plot the Pareto Evaluation
fignum=1;
figure(fignum)
sz = 5;
scatter(total_reliability, total_cost, sz, 'blue')
xlabel('Reliability')
ylabel('Cost')
title('Pareto Plot')
感谢您的帮助。我对Matlab没有太多的经验,我也试着四处寻找帮助,但没有任何效果
下面是一个示例代码,可以使我创建的问题更简单:
% Pareto_Eval
baseline_cost = 55;
nrows = 3;
%Initialize Variables
for aa = 1:nrows
cost_delta(aa) = 0;
reliability(aa) = 1;
end
icount = 1;
%Group 1
for row1 = 1:2
if row1 == 1
cost_delta(1)= 5;
reliability(1) = 0.999;
elseif row1==2
cost_delta(1) = 0;
reliability(1) = .995;
end
%Group 2
for row2 = 1:2
if row2 == 1
cost_delta(2) = 0;
reliability(2) = .98;
else
cost_delta(2) = -2;
reliability(2) = .95;
end
%Group 3
for row3 = 1:2
if row3 == 1
cost_delta(3) = 3;
reliability(3) = .997;
else
cost_delta(3) = 0;
reliability(3) = .96;
end
%initializing each row
cost_delta_total = 0;
reliability_product = 1;
for bb = 1:nrows
cost_delta_total = cost_delta_total + cost_delta(bb);
reliability_product = reliability_product*reliability(bb);
end
total_cost(icount) = baseline_cost + cost_delta_total;
total_reliability(icount) = reliability_product;
icount = icount + 1;
end
end
end
fignum=1;
figure(fignum)
sz = 25;
scatter(total_reliability, total_cost, sz)
xlabel('Reliability')
ylabel('Cost')
title('Pareto Plot')
基本上,我需要在每个if循环中绘制一个图,但我不确定如何做到这一点,并将它们全部放在同一个图上。听起来像是一个有趣的项目!我不确定我是否正确理解了你想要的图,但希望下面的代码能让你更接近你想要的 我从嵌套for循环的混乱开始(正如您所做的),但通过构建置换矩阵使其更加简洁
counter = 0;
for propulsion_options = 1:2
for entry_mode = 1:2
for landing_method = 1:3
for lander_type = 1:3
for rover_type = 1:2
for power_source = 1:2
for depth_testing = 1:2
for other_cameras = 1:3
counter = counter +1
permutations(counter,:) = [...
propulsion_options,...
entry_mode,...
landing_method,...
lander_type,...
rover_type,...
power_source,...
depth_testing,...
other_cameras];
end
end
end
end
end
end
end
end
通过这种方式,我将实际得分排除在循环之外,并且可能更容易调整值。我将成本和可靠性数组初始化为与排列数组相同的大小:
cost_delta = zeros(size(permutations));
reliability = zeros(size(permutations));
然后,对于每个度量,我在排列数组中搜索每个可能值的所有发生率,并分配适当的分数:
%propulsion
propertyNo = 1;
cost_delta(find(permutations(:,propertyNo)==1),propertyNo) = -7;
cost_delta(find(permutations(:,propertyNo)==2),propertyNo) = 0;
reliability(find(permutations(:,propertyNo)==1),propertyNo) = 0.995;
reliability(find(permutations(:,propertyNo)==2),propertyNo) = 0.99;
%entry_mode (2)
propertyNo = 2;
cost_delta(find(permutations(:,propertyNo)==1),propertyNo) = -3;
cost_delta(find(permutations(:,propertyNo)==2),propertyNo) = 0;
reliability(find(permutations(:,propertyNo)==1),propertyNo) = 0.99;
reliability(find(permutations(:,propertyNo)==2),propertyNo) = 0.98;
%landing_method (3)
propertyNo = 3;
cost_delta(find(permutations(:,propertyNo)==1),propertyNo) = 0;
cost_delta(find(permutations(:,propertyNo)==2),propertyNo) = 4;
cost_delta(find(permutations(:,propertyNo)==3),propertyNo) = -2;
reliability(find(permutations(:,propertyNo)==1),propertyNo) = 0.99;
reliability(find(permutations(:,propertyNo)==2),propertyNo) = 0.995;
reliability(find(permutations(:,propertyNo)==3),propertyNo) = 0.95;
%lander_type (3)
propertyNo = 4;
cost_delta(find(permutations(:,propertyNo)==1),propertyNo) = 10;
cost_delta(find(permutations(:,propertyNo)==2),propertyNo) = 0;
cost_delta(find(permutations(:,propertyNo)==3),propertyNo) = 15;
reliability(find(permutations(:,propertyNo)==1),propertyNo) = 0.99;
reliability(find(permutations(:,propertyNo)==2),propertyNo) = 0.99;
reliability(find(permutations(:,propertyNo)==3),propertyNo) = 0.95;
%rover_type (2)
propertyNo = 5;
cost_delta(find(permutations(:,propertyNo)==1),propertyNo) = -2;
cost_delta(find(permutations(:,propertyNo)==2),propertyNo) = 0;
reliability(find(permutations(:,propertyNo)==1),propertyNo) = 0.98;
reliability(find(permutations(:,propertyNo)==2),propertyNo) = 0.975;
%power_source (2)
propertyNo = 6;
cost_delta(find(permutations(:,propertyNo)==1),propertyNo) = -3;
cost_delta(find(permutations(:,propertyNo)==2),propertyNo) = 0;
reliability(find(permutations(:,propertyNo)==1),propertyNo) = 0.95;
reliability(find(permutations(:,propertyNo)==2),propertyNo) = 0.995;
%depth_testing (2)
propertyNo = 7;
cost_delta(find(permutations(:,propertyNo)==1),propertyNo) = 0;
cost_delta(find(permutations(:,propertyNo)==2),propertyNo) = 2;
reliability(find(permutations(:,propertyNo)==1),propertyNo) = 0.99;
reliability(find(permutations(:,propertyNo)==2),propertyNo) = 0.85;
%other_cameras (3)
propertyNo = 8;
cost_delta(find(permutations(:,propertyNo)==1),propertyNo) = -1;
cost_delta(find(permutations(:,propertyNo)==2),propertyNo) = -1;
cost_delta(find(permutations(:,propertyNo)==3),propertyNo) = 0;
reliability(find(permutations(:,propertyNo)==1),propertyNo) = 0.99;
reliability(find(permutations(:,propertyNo)==2),propertyNo) = 0.99;
reliability(find(permutations(:,propertyNo)==3),propertyNo) = 0.9801;
然后,通过沿着第二维度对产品进行求和和,每个排列可以获得总成本/可靠性得分:
cost_delta_total = sum(cost_delta,2);
reliability_product = prod(reliability,2);
最后,您可以绘制所有点(根据原始点):
或者,您可以通过搜索特定的属性值来创建排列索引,并绘制这些不同的颜色(实际上,此位回答了您最具体的问题,即如何在同一轴上绘制两个对象-您只需使用按住;
命令):
祝任务顺利!发射日是什么时候 听起来是个有趣的项目!我不确定我是否正确理解了你想要的图,但希望下面的代码能让你更接近你想要的 我从嵌套for循环的混乱开始(正如您所做的),但通过构建置换矩阵使其更加简洁
counter = 0;
for propulsion_options = 1:2
for entry_mode = 1:2
for landing_method = 1:3
for lander_type = 1:3
for rover_type = 1:2
for power_source = 1:2
for depth_testing = 1:2
for other_cameras = 1:3
counter = counter +1
permutations(counter,:) = [...
propulsion_options,...
entry_mode,...
landing_method,...
lander_type,...
rover_type,...
power_source,...
depth_testing,...
other_cameras];
end
end
end
end
end
end
end
end
通过这种方式,我将实际得分排除在循环之外,并且可能更容易调整值。我将成本和可靠性数组初始化为与排列数组相同的大小:
cost_delta = zeros(size(permutations));
reliability = zeros(size(permutations));
然后,对于每个度量,我在排列数组中搜索每个可能值的所有发生率,并分配适当的分数:
%propulsion
propertyNo = 1;
cost_delta(find(permutations(:,propertyNo)==1),propertyNo) = -7;
cost_delta(find(permutations(:,propertyNo)==2),propertyNo) = 0;
reliability(find(permutations(:,propertyNo)==1),propertyNo) = 0.995;
reliability(find(permutations(:,propertyNo)==2),propertyNo) = 0.99;
%entry_mode (2)
propertyNo = 2;
cost_delta(find(permutations(:,propertyNo)==1),propertyNo) = -3;
cost_delta(find(permutations(:,propertyNo)==2),propertyNo) = 0;
reliability(find(permutations(:,propertyNo)==1),propertyNo) = 0.99;
reliability(find(permutations(:,propertyNo)==2),propertyNo) = 0.98;
%landing_method (3)
propertyNo = 3;
cost_delta(find(permutations(:,propertyNo)==1),propertyNo) = 0;
cost_delta(find(permutations(:,propertyNo)==2),propertyNo) = 4;
cost_delta(find(permutations(:,propertyNo)==3),propertyNo) = -2;
reliability(find(permutations(:,propertyNo)==1),propertyNo) = 0.99;
reliability(find(permutations(:,propertyNo)==2),propertyNo) = 0.995;
reliability(find(permutations(:,propertyNo)==3),propertyNo) = 0.95;
%lander_type (3)
propertyNo = 4;
cost_delta(find(permutations(:,propertyNo)==1),propertyNo) = 10;
cost_delta(find(permutations(:,propertyNo)==2),propertyNo) = 0;
cost_delta(find(permutations(:,propertyNo)==3),propertyNo) = 15;
reliability(find(permutations(:,propertyNo)==1),propertyNo) = 0.99;
reliability(find(permutations(:,propertyNo)==2),propertyNo) = 0.99;
reliability(find(permutations(:,propertyNo)==3),propertyNo) = 0.95;
%rover_type (2)
propertyNo = 5;
cost_delta(find(permutations(:,propertyNo)==1),propertyNo) = -2;
cost_delta(find(permutations(:,propertyNo)==2),propertyNo) = 0;
reliability(find(permutations(:,propertyNo)==1),propertyNo) = 0.98;
reliability(find(permutations(:,propertyNo)==2),propertyNo) = 0.975;
%power_source (2)
propertyNo = 6;
cost_delta(find(permutations(:,propertyNo)==1),propertyNo) = -3;
cost_delta(find(permutations(:,propertyNo)==2),propertyNo) = 0;
reliability(find(permutations(:,propertyNo)==1),propertyNo) = 0.95;
reliability(find(permutations(:,propertyNo)==2),propertyNo) = 0.995;
%depth_testing (2)
propertyNo = 7;
cost_delta(find(permutations(:,propertyNo)==1),propertyNo) = 0;
cost_delta(find(permutations(:,propertyNo)==2),propertyNo) = 2;
reliability(find(permutations(:,propertyNo)==1),propertyNo) = 0.99;
reliability(find(permutations(:,propertyNo)==2),propertyNo) = 0.85;
%other_cameras (3)
propertyNo = 8;
cost_delta(find(permutations(:,propertyNo)==1),propertyNo) = -1;
cost_delta(find(permutations(:,propertyNo)==2),propertyNo) = -1;
cost_delta(find(permutations(:,propertyNo)==3),propertyNo) = 0;
reliability(find(permutations(:,propertyNo)==1),propertyNo) = 0.99;
reliability(find(permutations(:,propertyNo)==2),propertyNo) = 0.99;
reliability(find(permutations(:,propertyNo)==3),propertyNo) = 0.9801;
然后,通过沿着第二维度对产品进行求和和,每个排列可以获得总成本/可靠性得分:
cost_delta_total = sum(cost_delta,2);
reliability_product = prod(reliability,2);
最后,您可以绘制所有点(根据原始点):
或者,您可以通过搜索特定的属性值来创建排列索引,并绘制这些不同的颜色(实际上,此位回答了您最具体的问题,即如何在同一轴上绘制两个对象-您只需使用按住;
命令):
祝任务顺利!发射日是什么时候 你的问题不清楚,你能问一个简单的问题,写一个简单的代码来解释吗?是的,对不起。下面是一个与之类似的示例代码,参数较少:构建数据的方式是错误的。当行号由for循环递增时,对行号调用
if/elseif/else
。循环期间将触发所有if
条件。在所有这些循环中,您只分配最后一个else
条件的最后一个值。。。您可以在一条指令中建立您的总可靠性
,因为您的简化代码非常有用。请把它放在原代码的地方,不要显示原代码,这会让人困惑和分心。让你的问题简单明了,切中要害!谢谢你的问题不清楚,你能问一个简单的问题,写一个简单的代码来解释吗?是的,对不起。下面是一个与之类似的示例代码,参数较少:构建数据的方式是错误的。当行号由for循环递增时,对行号调用if/elseif/else
。循环期间将触发所有if
条件。在所有这些循环中,您只分配最后一个else
条件的最后一个值。。。您可以在一条指令中建立您的总可靠性
,因为您的简化代码非常有用。请把它放在原代码的地方,不要显示原代码,这会让人困惑和分心。让你的问题简单明了,切中要害!谢谢您可以使用ndgrid
更轻松地构建置换矩阵。非常感谢您的输入,很抱歉反应太晚。不过这帮了大忙。不幸的是,没有实际的发射,更多的是一个理论项目/问题来模拟真实世界的任务以及如何选择顶级参数。再次感谢您,您可以使用ndgrid
更轻松地构建置换矩阵。感谢您的输入,很抱歉反应太晚。不过这帮了大忙。不幸的是,没有实际的发射,更多的是一个理论项目/问题来模拟真实世界的任务以及如何选择顶级参数。再次感谢