当前位置: 首页 > news >正文

MATLAB | 分段赋色折线图及其图例绘制

绘制效果


原理解释

我前段时间总结MATLAB中的离谱技巧里提到过这么一个玩意:

x=1:.1:10;y=sin(x); 
hLine=plot(x,y,'-','LineWidth',5);

colorNum=length(hLine.XData);

% 这里用的pink配色,可以换成其他colormap
% 最后面透明度用的200可调整
colorData=uint8([(pink(colorNum).*255)';200.*ones(1,colorNum)]);
pause(1e-16)% Edge建立需要一定时间因此pause一下很重要
set(hLine.Edge,'ColorBinding','interpolated','ColorData',colorData)

原理就是,看着似乎是画图象时plot函数会只创建一个图形对象,但其实它这一个图形对象是很多隐藏的基础图形对象的组合体,这些更基础的对象可以设置更加复杂的属性,就比如上面设置了LineStrip对象的ColorData属性令其渐变。

不一定非要渐变哈,这里ColorData要求是 4 × n 4\times n 4×n大小的矩阵,每一列代表一个点的R,G,B及透明度值,只要矩阵大小和取点数对的上,颜色咋设置都可以,注意比较底层的图形对象的颜色不是要求0-1,而是要求0-255的uint8格式。


分段赋色折线图

这样我们就检测每一个Y值的范围为矩阵不同的点赋予不同颜色就好:
这里分段Y值要求把正负无穷加进去嗷,分段Y值和颜色比如说可以这样设置:

DivY=[-inf,-5.5,-4.5,inf];
ColorList=[20,72,83;114,146,184;57,120,164];

这样绘制分段赋色折线图的代码可以写做:

x=0:.05:3*pi;
noise=(rand([1,length(x)])-0.5);
y=sin(x-2)-5+noise.*.3;

% 绘制原始图像
hold on;
hLine=plot(x,y,'-','LineWidth',1.8);  
 
% 设置分段点、颜色
DivY=[-inf,-5.5,-4.5,inf];
ColorList=[20,72,83;114,146,184;57,120,164];

% 构造颜色列表、修改颜色、绘制辅助线
YData=hLine.YData;
CData=repmat([0,0,0,255],[length(YData),1]);
for i=1:length(ColorList)
    yline(DivY(i),'LineWidth',1,'LineStyle','--','Color',[0,0,0])
    tBool=(YData>=DivY(i))&(YData<=DivY(i+1));
    CData(tBool,1:3)=repmat(ColorList(i,:),[sum(tBool),1]);
end
pause(1e-16)
set(hLine.Edge,'ColorBinding','interpolated','ColorData',uint8(CData)')


添加图例

添加图例的代码要写在颜色修改之前,因为MATLAB每次绘图都要调整绘图区域的位置啊,颜色序号啥的属性,会把比较底层对象的属性给刷掉,因此先绘制图例再进行上一个环节的修改颜色。

添加图例的代码(画几条折线在坐标区域外等方式隐藏起来,然后为这几条折线绘制图例):

lgdStr={'y<-5.5','-5.5<y<-4.5','y>-4.5'};

% 绘制图例
hLineSet{size(ColorList,1)}='';
for i=1:length(ColorList)
    hLineSet{i}=plot(mean(get(gca,'XLim')),mean(get(gca,'YLim')),...
        'LineWidth',1.8,'Color',ColorList(i,:)./255);
end
legend([hLineSet{end:-1:1}],lgdStr{end:-1:1},'AutoUpdate','off')


完整代码

再进行一下坐标区域的基础修饰,同时代码里贴心准备了四种配色,可以自己选用:

x=0:.05:3*pi;
noise=(rand([1,length(x)])-0.5);
y=sin(x-2)-5+noise.*.3;

% 绘制原始图像
hold on;
hLine=plot(x,y,'-','LineWidth',1.8);  

% 设置分段点、颜色、图例文本
DivY=[-inf,-5.5,-4.5,inf];
C1=[20,72,83;114,146,184;57,120,164];
C2=[239,192,171;149,196,201;59,107,111];
C3=[60,94,122;228,204,126;107,108,112];
C4=[92,143,167;221,199,180;208,83,68];
ColorList=C3;
lgdStr={'y<-5.5','-5.5<y<-4.5','y>-4.5'};

% 绘制图例
hLineSet{size(ColorList,1)}='';
for i=1:length(ColorList)
    hLineSet{i}=plot(mean(get(gca,'XLim')),mean(get(gca,'YLim')),...
        'LineWidth',1.8,'Color',ColorList(i,:)./255);
end
legend([hLineSet{end:-1:1}],lgdStr{end:-1:1},'AutoUpdate','off')

% 构造颜色列表、修改颜色、绘制辅助线
YData=hLine.YData;
CData=repmat([0,0,0,255],[length(YData),1]);
for i=1:length(ColorList)
    yline(DivY(i),'LineWidth',1,'LineStyle','--','Color',[0,0,0])
    tBool=(YData>=DivY(i))&(YData<=DivY(i+1));
    CData(tBool,1:3)=repmat(ColorList(i,:),[sum(tBool),1]);
end
pause(1e-16)
set(hLine.Edge,'ColorBinding','interpolated','ColorData',uint8(CData)')

% 修饰一下
set(gca,'LineWidth',1.5,'XMinorTick','on','YMinorTick','on')

C1

C2

C3

C4

相关文章:

  • C#面向对象程序设计课程实验三:实验名称:C#数组和集合
  • 数据结构--(栈、队列实现及3个OJ题)
  • 实时数据同步工具<Maxwell 操作案例>
  • 【设计模式】-创建型模式-第2章第3讲-【建造者模式】
  • CS231n Module2: CNN part1:Architecture
  • 模电学习1. 三极管基础知识及常用电路
  • 优化APK体积
  • 【初学者入门C语言】之函数(八)
  • 《Linux基本常识的介绍》
  • 【云原生】Kubernetes介绍
  • C语言自定义类型【结构体】
  • springboot请求映射原理,springboot版本2.3.4.RELEASE
  • 【数值分析+python】python生成稀疏对称正定矩阵
  • jave web开发(IDEA中配置maven)
  • 保存滚动位置的实现方法
  • 【面试系列】之二:关于js原型
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • Android优雅地处理按钮重复点击
  • EventListener原理
  • React-生命周期杂记
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 精彩代码 vue.js
  • 设计模式(12)迭代器模式(讲解+应用)
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 使用 @font-face
  • 使用Gradle第一次构建Java程序
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 一天一个设计模式之JS实现——适配器模式
  • 智能合约Solidity教程-事件和日志(一)
  • ​一些不规范的GTID使用场景
  • #DBA杂记1
  • #pragma once
  • #考研#计算机文化知识1(局域网及网络互联)
  • (C语言)字符分类函数
  • (ZT)薛涌:谈贫说富
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (南京观海微电子)——COF介绍
  • (四)Android布局类型(线性布局LinearLayout)
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转) 深度模型优化性能 调参
  • .htaccess 强制https 单独排除某个目录
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Core 中插件式开发实现
  • .Net CoreRabbitMQ消息存储可靠机制
  • .Net程序帮助文档制作
  • .net中调用windows performance记录性能信息
  • /*在DataTable中更新、删除数据*/
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(朱雀组)
  • [Android]通过PhoneLookup读取所有电话号码
  • [Angular 基础] - 表单:响应式表单
  • [ASP]青辰网络考试管理系统NES X3.5
  • [bzoj 3534][Sdoi2014] 重建