如何在指定MATLAB生产成本趋势图中标记最大值与最小值
在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'}); % 新增:标记最值的核心代码 % 1. 找到成本的最大值、最小值,以及它们对应的时间索引 [maxCost, maxIdx] = max(fuelCost); [minCost, minIdx] = min(fuelCost); % 2. 在图上绘制显眼的标记点 plot(timevec(maxIdx), maxCost, 'r*', 'MarkerSize', 12); % 红色五角星标记最大值 plot(timevec(minIdx), minCost, 'bs', 'MarkerSize', 10); % 蓝色正方形标记最小值 % 3. 添加文本注释,清晰显示最值数值和对应日期 % 注意:+50/-50是文本相对于标记点的偏移量,你可以根据自己的数据范围调整 text(timevec(maxIdx), maxCost + 50, ... sprintf('Max: $%.2f\\nDay: %.0f', maxCost, timevec(maxIdx)), ... 'Color', 'red', 'FontSize', 10); text(timevec(minIdx), minCost - 50, ... sprintf('Min: $%.2f\\nDay: %.0f', minCost, timevec(minIdx)), ... 'Color', 'blue', 'FontSize', 10);
关键步骤解释
- 定位最值点:用MATLAB内置的
max()和min()函数,一次性获取最值的数值和它们在数组中的索引,这样就能找到对应的日期timevec(maxIdx)和timevec(minIdx)。 - 绘制标记点:用
plot()函数单独绘制最值点,选择醒目的标记样式(比如红色星号、蓝色方块),并通过MarkerSize调整大小,确保一眼就能看到。 - 添加文本注释:用
text()函数在标记点附近添加格式化文本,sprintf()用来把数值和日期整合成清晰的字符串,偏移量(+50/-50)可以根据你的成本数据范围调整,避免文本挡住标记点。
可选优化
如果你的timevec是datetime类型(不是单纯的天数数字),可以把文本里的日期格式改成更直观的形式,比如:
sprintf('Max: $%.2f\\nDate: %s', maxCost, datestr(timevec(maxIdx), 'dd-mmm-yyyy'))
这样会显示类似Date: 15-Apr-2013的格式,更清晰。
另外,你还可以用annotation()函数添加箭头指向最值点,让标记更明确:
% 箭头坐标是归一化的(0-1范围),需要根据你的图调整位置 annotation('arrow', [0.35, timevec(maxIdx)/30], [0.75, maxCost/max(fuelCost)], 'Color', 'red');
内容的提问来源于stack exchange,提问作者MiVi
相关产品推荐
相关产品推荐

