绘制最大值和最小值

时间:2018-04-25 20:45:10

标签: matlab

plot(timevec,fuelCost,'-k')
grid on
xlabel('Time(days)');
ylabel('Amount of Money Spent ($)');
title({'Plant Production Cost';'01 April 2013 - 30 April 2013'})

如果我正在绘制此图表,我该如何绘制情节中包含的最大值和最小值?

2 个答案:

答案 0 :(得分:1)

假设fuelcost是单个数据向量(即不是多列矩阵),并且您想要在整个数据范围内使用水平线,那么在当前行之后,使用

timespan = [min(timevec) max(timevec)]; % or timespan = xlim(gca);
line(timespan,[1 1]*max(fuelCost),'Color',[1 0 0]);
line(timespan,[1 1]*min(fuelCost),'Color',[0 1 0]);

如果你只想在图上的正确点上点,那么在当前行之后,使用

[max_val,i_max] = max(fuelCost);
[min_val,i_min] = min(fuelCost);
line(timevec([i_min,i_max]),[min_val,max_val],'Marker','.','Linestyle','none','Markersize',10);

答案 1 :(得分:0)

目前尚不清楚您是否只想绘制最大值和最小值,如果您只想在现有情节中突出显示它们......但我认为这应该可以满足您的需求:

vec = randi([20 50],100,1);
vec_len = numel(vec);
vec_seq = 1:vec_len;

val_max = max(vec);
vec_max = nan(vec_len,1);
vec_max(vec == val_max) = val_max;

val_min = min(vec);
vec_min = nan(vec_len,1);
vec_min(vec == val_min) = val_min;

plot(vec_seq,vec,'-k');
hold on;
grid on;
plot(vec_seq,vec_max,'.r','Markersize',25);
plot(vec_seq,vec_min,'.b','Markersize',25);
hold off;

为了使其适应您当前的框架,您在修改上面的代码时没有问题,因为它非常基础。这是输出:

Output