Matlab绘图添加背景色,动态添加背景

Matlab绘图添加背景色,动态添加背景

有没有小伙伴想过绘制这种有背景的曲线图呢?因为矩形是背景,所以要先绘制,然后再绘制曲线,因此,最先想到的思路可能是:先绘制三个背景矩形,然后填充对应的颜色,设置透明度。接着在绘制曲线。弊端在于矩形的大小和位置需要根据曲线的绘制范围调节。并且注意,matlab的rectangle函数绘制的矩形无法设置透明度!!所以可以换个函数进行绘制矩形。下面用到的是fill函数。

有没有什么好的办法让他自动调节背景矩形大小呢?当然有!!!看我操作:

和前面的思路不同,因为矩形的大小是根据曲线范围调节的,所以必须先绘制曲线,然后再绘制矩形,那这样的话,曲线就在矩形背景后面了,被遮挡了,因此可以通过set函数进行前后层调节。当绘制了曲线,就可以通过get函数获取坐标轴范围,然后根据坐标轴范围进行矩形背景设置了。一个简要代码如下:

c 复制代码
clc;clear all;close;
%% 准备数据
x = 0:0.01:7;
y = sin(x)+x/3;
StartTime  = 1;
TransTimeTemp = 2.5;
%% 绘图
figure(1)
linewidth = 2;
l1 = plot(x,y,'linewidth',linewidth); % 绘制曲线
hold on
grid on
% 获取坐标轴范围
XlabRang = get(gca,'xlim');  % 获取横坐标范围
XlabMmin = XlabRang(1);
XlabMmax = XlabRang(2);
YlabRang = get(gca,'ylim');
YlabMmin = YlabRang(1);
YlabMmax = YlabRang(2);

% 绘制背景区域
FaceAlpha = 0.5;  % 背景
RecAcc = fill([0 0 StartTime StartTime],[YlabMmin YlabMmax YlabMmax YlabMmin],'r','FaceColor',[0.87,0.91,0.77],'EdgeColor','none','FaceAlpha',FaceAlpha);
RecC = fill([StartTime StartTime StartTime+TransTimeTemp StartTime+TransTimeTemp],[YlabMmin YlabMmax YlabMmax YlabMmin],'r','FaceColor',[0.94,0.84,0.78],'EdgeColor','none','FaceAlpha',FaceAlpha);
RecS = fill([StartTime+TransTimeTemp StartTime+TransTimeTemp XlabMmax XlabMmax],[YlabMmin YlabMmax YlabMmax YlabMmin],'r','FaceColor',[0.78,0.87,0.95],'EdgeColor','none','FaceAlpha',FaceAlpha);

% 最关键的 设置图像前后关系
set(gca,'child',[l1 RecAcc RecC RecS])  % 将曲线放在最前端

无论当你曲线范围怎么变化,背景矩形会跟着自动调节,这样就免去了手动调节矩形范围了!!!

相关推荐
会当临7 分钟前
【c++】四种类型转换形式
开发语言·c++
xxy.c22 分钟前
嵌入式解谜日志—多路I/O复用
linux·运维·c语言·开发语言·前端
数据爬坡ing27 分钟前
C++ 类库管理系统的分析与设计:面向对象开发全流程实践
java·运维·开发语言·c++·软件工程·软件构建·运维开发
DKPT36 分钟前
JVM新生代和老生代比例如何设置?
java·开发语言·jvm·笔记·学习
知彼解己39 分钟前
JVM 运行时数据区域
java·开发语言·jvm
坠金43 分钟前
CentOS安装或升级protoc
linux·c语言·开发语言
江团1io044 分钟前
一篇文章带你彻底搞懂 JVM 垃圾收集器
java·开发语言·jvm
会飞的胖达喵1 小时前
Qt Model/View/Delegate 架构详解
开发语言·qt·架构
edjxj1 小时前
Qt添加图标资源
开发语言·数据库·qt
鲸落落丶1 小时前
finalize() 方法介绍
开发语言·python