MATLAB绘图技巧-多边形区域填充图

news2024/11/28 16:52:49

MATLAB绘图技巧-多边形区域填充图

======以下内容来自:科学网—MATLAB绘图技巧-多边形区域填充图 - 彭真明的博文 (sciencenet.cn)====START===========

       为了突出某个区域或局部数据的特性,便于数据的可视化和解释,常需要绘制二维区域填充图。MATLAB提供了三种类型的用于二维图形区域填充的绘图函数,具体是area函数、fill函数和patch函数。

       area函数是Y数值对 x 坐标围成的面积图,该函数根据Y的形状填充曲线之间的区域。

       fill函数是创建二维填充补片,即填充多边形区域绘制为补片,其顶点位于由X和Y指定的(x,y)位置,主要用于平面中多个区域的颜色填充。

       patch函数是创建彩色多边形的补片,即将X和Y指定为每个顶点的坐标来创建一个或多个彩色多边形补片,主要用于平面中多边形的颜色填充。patch与fill函数功能和用法类似。

以下给出3个具体绘图示例:

会用到的坐标轴修饰函数代码如下:

%会用到的坐标轴修饰函数代码如下:

function defualtAxes
  ax=gca; hold on; box on

  ax.XGrid='on';

  ax.YGrid='on';

  ax.XMinorTick='on';

  ax.YMinorTick='on';

  ax.LineWidth=1.2;

  ax.GridLineStyle=':';

  %ax.FontName='Cambria';

  ax.FontSize=12;

  ax.GridAlpha=.5;

end

Demo 1 完整代码如下:

clc; clear; close all;

% Demo 1
% ------------------------
% 加载数据
x = linspace(-8,12,100);
y1 = normpdf(x,4,6);  % Normal probability density function
y2 = normpdf(x,0,1).*0.5+normpdf(x,4,2).*0.5;
y3 = normpdf(x,-3,2);
y = [y1;y2;y3];

% 预设颜色
c = [184 194 140; 201 226 240; 250 181 157]./255; % Three colors


% 绘图
x = linspace(-8,12,100);
y1 = normpdf(x,4,6);% Normal probability density function
y2 = normpdf(x,0,1).*0.5+normpdf(x,4,2).*0.5;
y3 = normpdf(x,-3,2);
y = [y1;y2;y3];

for i=1:size(y,1)
area(x,y(i,:),'FaceColor',c(i,:),'EdgeColor','none','FaceAlpha',0.5); hold on
end

% 坐标轴
xlabel('x/Samples'),ylabel('y/Value')
legend({'- Area No.1','- Area No.2','- Area No.3'})
set(gca,'XLim',[-8 12]);

% 修饰
defualtAxes
% ------------------------

        如果填充过程要区分正负值,那么需要做出相应的零交叉点的判断,从而确定颜色的填充模式,这样就比较复杂。

        一种简单的做法是,首先将数据拆分成正负两个序列,分别绘制填充图,这样实现起来就变得很简单了,不需要复杂的判断。

Demo 2 完整代码如下:

%完整代码如下:
% Demo 2
%--------------------
load('plotData.mat');

y = data';

y = y(1,:)-10; % 产生正负值

x = linspace(0,10,length(y));

y1 = y; y1(y1<0)=0; % Negative value

y2 = y; y2(y2>0)=0; % Positive value

figure

area(x,y1,'FaceColor','r','EdgeColor','r','FaceAlpha',0.6); hold on

area(x,y2,'FaceColor','b','EdgeColor','b','FaceAlpha',0.6);

xlabel('x-axis/Samples'),ylabel('y-axis/Intensity value')

set(gca,'FontName','Times New Roman','FontSize',12)

legend({'- Positive value area','- Negative value area'})

set(gcf,'Color','White');  % Background is white


% 修饰
defualtAxes

%--------------------

       以上area函数主要针对与坐标轴围成的区域的填充,如果需要对图形窗口内任意闭合区域或多边形区域及进行填充,则需要用到fill和patch函数。

          因为,这两个函数功能和用法类似,它们的基本用法MATLAB帮助文件均有详细说明。以下以fill函数为例,用一个稍复杂的应用为例进行说明。

         首先,我们产生一条含随机噪声的Bessel分布数据。然后,对其进行多项式拟合,绘制拟合误差范围的置信度区间。

       那么,只有一条曲线如何构成闭合区域?

        我们可以按精度范围扩大y轴的数值范围,对应的x坐标从end端折回起始端,这样就形成了一个闭合曲线,也正包含了数据范围的闭环区域。

Demo 3 完整代码如下:

%完整代码如下:
% Demo 3
%-------------------
x = 0 : 0.2 : 10;

y = besselj(0, x);% Bessel 函数

y = y+0.8*rand([1,length(x)]);

% 多项式拟合
[p,S] = polyfit(x,y,3);
[y_fit, delta] = polyval(p,x,S); % delta 标准误差估计值

%绘制原始数据、线性拟合及95%预测区间 y±2Δ
uy = y_fit+2*delta;
dy = y_fit-2*delta;

figure
% 绘制原始数据
plot(x,y,'rx','LineWidth',1.5)
hold on

%绘制拟合曲线
plot(x,y_fit,'Color',[0 1 1],'LineWidth',1.5)
hold on

%绘制置信区间
xconf = [x x(end:-1:1)] ;% x坐标回转形成闭合区域

yconf = [uy dy(end:-1:1)]; % 扩大数据区间

c2 = [182,100,199]./255;

plot([x',x'],[uy',dy'],'Color',c2,'LineWidth',1.2,'LineStyle','--')

fill(xconf, yconf,'k','FaceColor',c2,'EdgeColor','none','FaceAlpha',0.1);

xlabel('x-axis/Samples'),ylabel('y-axis/Intensity value')

set(gca,'FontName','Times New Roman','FontSize',12)

legend({'- Data','- Linear fit','- 95% Prediction Interval'})

set(gcf,'Color','White');  % Background is white

% 修饰
defualtAxes

%--------------------

Demo3的实现代码中,用patch替换fill函数,也会得到基本一致的图形显示结果。

参考来源:

[1] MATLAB绘图技巧-颜色渐变折线图

[2] MATLAB绘图技巧-折线图绘制

[2] MATLAB绘图技巧-颜色渐变柱状图绘制

======以上内容来自:科学网—MATLAB绘图技巧-多边形区域填充图 - 彭真明的博文 (sciencenet.cn)====END=============

%绘制正态概率密度函数对应的填充图
figure
x1 = [ -8 : 0.2 : 8 ];
y1 = 2 * exp( -( x1 ).^2 / 2 );
fill( x1, y1, 'b' )
hold on
%绘制非对称区间上正态概率密度函数对应的填充图
x2 = [ 1: 0.1 : 10 ];
y2 = -2 * exp( -( x2 - 2  ).^2 / 2 );
fill( x2, y2, 'r' )
title( ' fill demo ' )
figure
x3 = [ 1 : 0.5 : 5 ];
y3 = x3.^2;
c = [ randn(length(x3), 1) ];%颜色矩阵,可以根据自己的需要指定
fill( x3, y3, c )
hold on
y4 = -x3.^2;
fill( x3, y4, 'c' )%此处的c是青色
title( 'color matris fill demo' )

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1848250.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5G如何推动工业数字化转型?

据中国信息通信研究院测算&#xff0c;5G商用五年来&#xff0c;直接带动经济总产出约5.6万亿元&#xff0c;间接带动总产出约14万亿元&#xff0c;有力促进了经济社会高质量发展。而工业数字化转型&#xff0c;作为应对市场变革的关键战略&#xff0c;也借助5G技术卓越的高带宽…

海南聚广众达电子商务咨询有限公司抖音电商新标杆

在数字经济的浪潮中&#xff0c;抖音电商正成为一股不可忽视的力量。海南聚广众达电子商务咨询有限公司&#xff0c;作为专注于抖音电商服务的领军企业&#xff0c;凭借其专业的团队和创新的思维&#xff0c;不断助力商家在抖音平台上实现商业价值的最大化。 海南聚广众达电子…

几十块就能“开盒”,还能查祖上三代?

近期&#xff0c;网络上突然开始掀起一阵“人肉开盒”风波。明星、博主、素人无一幸免。 隐匿在此般恶劣行径背后的幕后黑手们无视法律、充满戾气。他们才不管你是什么人&#xff0c;只要有哪里让他们不愉快&#xff0c;那么不好意思&#xff0c;马上“开”你没商量。 这个“…

Linux企业实时同步服务---3688字

实时同步服务 正常的互联网公司架构&#xff1a; 内容&#xff1a;每天服务器及服务器上的应用程序等正常使用&#xff08;每天查看&#xff09;比如&#xff1a;邮件&#xff0c;短信&#xff0c;等信息&#xff1b;巡检内容是否正常使用。互联网公司就是底层服务开发、代码运…

【项目实战课】基于TensorRT+YOLOv5的安全帽检测模型部署实战

欢迎大家来到我们的项目实战课&#xff0c;本期内容是《基于TensorRTYOLOv5的安全帽检测模型部署实战》。所谓项目课&#xff0c;就是以简单的原理回顾详细的项目实战的模式&#xff0c;针对具体的某一个主题&#xff0c;进行代码级的实战讲解。 本次主题 目标检测是最基础的计…

带颜色的3D点云数据发布到ros1中(通过rviz显示)python、C++

ros中发布点云数据xyz以及带颜色的点云数据xyzrgb ros中发布点云数据xyz可以直接用python来做或者C(看个人偏好) ros中发布带颜色的点云数据xyzrgb环境1.新建ROS工作空间2.创建功能包 ros中发布点云数据xyz 可以直接用python来做或者C(看个人偏好) 在这里我们带有颜色的点云数…

LLM大模型开发-基础概论

前言 大家好&#xff0c;我是GISer Liu,好久不见&#xff0c;工作之余&#xff0c;我又来参加DataWhale举办的每月学习赛了&#xff1b;期待这个系列文章能帮助各位读者快速入门LLM开发&#xff0c;希望大家喜欢&#xff1b;Github链接已放在文末&#xff1b; 概述 在这篇文章中…

TCP/IP协议,三次握手,四次挥手,常用的协议

IP - 网际协议 IP 负责计算机之间的通信。 IP 负责在因特网上发送和接收数据包。 HTTP - 超文本传输协议 HTTP 负责 web 服务器与 web 浏览器之间的通信。 HTTP 用于从 web 客户端&#xff08;浏览器&#xff09;向 web 服务器发送请求&#xff0c;并从 web 服务器向 web …

鸿蒙开发:【信息传递载体Want】

Want概述 Want的定义与用途 [Want]是一种对象&#xff0c;用于在应用组件之间传递信息。 其中&#xff0c;一种常见的使用场景是作为[startAbility()]方法的参数。例如&#xff0c;当UIAbilityA需要启动UIAbilityB并向UIAbilityB传递一些数据时&#xff0c;可以使用Want作为…

NVIDIA Broadcast+普通麦克风+ai

关于 NVIDIA Broadcast NVIDIA Broadcast 通过 AI 的强大功能将标准网络摄像头和麦克风升级为高级智能设备&#xff0c;将任何房间转变为家庭工作室。通过麦克风噪声和房间回声消除、虚拟背景、网络摄像头自动取景和视频噪声消除等 AI 功能提高直播的视频和音频质量。借助 NVI…

Python基础教程(二十八):pip模块

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

MySQL之复制(九)

复制 复制管理和维护 确定主备是否一致 在理想情况下&#xff0c;备库和主库的数据应该是完全一样的。但事实上备库可能发生错误并导致数据不一致。即使没有明显的错误&#xff0c;备库同样可能因为MySQL自身的特性导致数据不一致&#xff0c;例如MySQL的Bug、网络中断、服务…

Spring之IoC(容器配置、Spring坐标导入、获取bean)

这里的话&#xff0c;因为博主学习时间有限&#xff0c;并没有实际去操作&#xff0c;只是学习和了解一个大概的流程。 目录 一、引言 1、管理什么&#xff1f;&#xff08;对象&#xff1a;Service、Dao ...&#xff09; 2、如何将被管理的对象告知 IoC 容器?&#xff08;用…

Android入门第70天-调用手机摄像头拍照的最全讲解

背景 涉及手机摄像头的应用太多了,有拍照、有摄像、有二维码、条码的扫描。还有AI领域的拍照识图。 无处不使用摄像头。 网上充斥着大多教程,无一例是可以把摄像头给真正驱动起来和完成一个高清拍照并取出照片进行后续处理的流程。这的确是一个不健康的现象。 本篇教程就是…

Springboot3.3 整合Cassandra 4.1.5

一、数据库搭建 -- 创建Keyspace CREATE KEYSPACE school WITH replication {class:SimpleStrategy, replication_factor : 1};-- 创建表 CREATE TABLE student(id int PRIMARY KEY, name text, age int, genders int, address text ,interest set<text>,phone lis…

qml/c++:基础界面的串口设置逻辑

文章目录 文章介绍效果图本机串口打开从虚拟端串口传数据到本机串口 代码添加serialporthandler类serialporthandler.hserialporthandler.cpp获取串口列表打开串口关闭串口清空按钮接收数据按钮逻辑&#xff1a;打开和关闭串口、弹出信息框、按钮文字改变 main.cpp 文章介绍 上…

快捷方式(lnk)--加载HTA-CS上线

免责声明:本文仅做技术交流与学习... 目录 CS: HTA文档 文件托管 借助mshta.exe突破 本地生成lnk快捷方式: 非系统图标路径不同问题: 关于lnk的上线问题: CS: HTA文档 配置监听器 有效载荷---->HTA文档--->选择监听器--->选择powershell模式----> 默认生成一…

大数据学习-Hive 函数

目录 Hive函数 Hive的内置函数 数学函数 取整函数: round 指定精度取整函数: round 向下取整函数: floor 向上取整函数: ceil 取随机数函数: rand 幂运算函数: pow 绝对值函数: abs 字符串函数 字符串长度函数&#xff1a;length 字符串反转函数&#xff1a;reverse 字…

zookeeper + kafka消息队列

zookeeper kafka 消息队列 一、消息队列简介 1、什么是消息队列 消息队列&#xff08;Message Queue&#xff09;是一种用于跨进程或分布式系统中传递消息的通信机制。消息队列在异步通信、系统解耦、负载均衡和容错方面具有重要作用。 &#xff08;1&#xff09;特性 异步…

解决Docker容器启动RabbitMQ报错:error pulling image configuration

解决Docker容器启动RabbitMQ报错&#xff1a;error pulling image configuration 问题原因是&#xff1a;Linux中系统时间跟真实时间相差太多导致。 解决办法就是让Linux的时间和网络时间同步就行了。 yum install -y ntpdate ntpdate 0.cn.pool.ntp.org