Matlab绘图实现数值升降时折线分别显示红蓝色的相关问题
问题原因
你当前的写法是逐点调用plot,单个点不存在线段结构,所以只有散点样式能显示,实线样式自然看不到效果,和是否定义第一个点没有直接关系。
要实现按升降变色的折线,需要逐段绘制两个相邻点之间的连线,而非逐点绘制。
实现方案
离线数据场景(已有全部x、y序列)
x = -10:.01:10; y = sin(x); hold on % 遍历所有相邻点对,逐段绘制 for ii = 2:length(x) if y(ii) > y(ii-1) % 上升段用红色实线 plot(x(ii-1:ii), y(ii-1:ii), 'r-', 'LineWidth', 1.5) else % 下降段用蓝色实线 plot(x(ii-1:ii), y(ii-1:ii), 'b-', 'LineWidth', 1.5) end end hold off grid on xlabel('x') ylabel('sin(x)')
如果需要同时保留散点标记,把线型参数改为'r*-'/'b*-'即可。
实时数据场景(逐点接收数据)
如果是数据流逐点输入的场景,可以缓存上一个点的坐标,新点到达后判断升降再绘制两点连线:
x = -10:.01:10; hold on % 缓存第一个点,单独绘制散点 pre_x = x(1); pre_y = sin(pre_x); plot(pre_x, pre_y, 'r*') for ii = 2:length(x) curr_x = x(ii); curr_y = sin(curr_x); % 判断线段升降 line_color = curr_y > pre_y ? 'r-' : 'b-'; % 绘制两点连线 plot([pre_x, curr_x], [pre_y, curr_y], line_color, 'LineWidth', 1.5) % 更新缓存的上一个点 pre_x = curr_x; pre_y = curr_y; end hold off grid on xlabel('x') ylabel('sin(x)')
内容的提问来源于stack exchange,提问作者wasis12
相关产品推荐
相关产品推荐

