文档章节

Matalb绘图总结2

尘中远
 尘中远
发布于 2016/05/12 23:54
字数 1391
阅读 5
收藏 0
点赞 2
评论 0

Matlab绘图总结2

Contents

概述
如何在一个数据量很大的曲线上做标记
平滑一个数据量很少的曲线
绘制面积图

概述

上篇文章介绍了简单的绘图函数,地址见: http://blog.csdn.net/czyt1988/article/details/38637725

这篇将介绍一些论文绘图中经常碰到的问题,如在一个数量很大的曲线上做标记,平滑一个数据量很少的曲线,绘制面积图,以及如何改进绘图的美感

clc;
clear all;
close all;
x = 0:0.01:5;
y1 = 2*sin(x)+0.1;
y2 = sin(x).*cos(x)+0.2;
y3 = sin(x)./(x+0.1);
y = [y1;y2;y3];
marker_style = {'>';'<';'s';'o';'d';'v';'p';'^';'*';'+';'x';'h'};
line_style = {'-';'--';':';'-.'};

如何在一个数据量很大的曲线上做标记

如果有个曲线有5000个点,为了区分多条曲线,又想给他们做标记用以区分,点数少的时候好说 ,设置Marker就可以实现,但点数多的时候却不是那么好看了。

可以看看面这个例子:

没有标记图片如下所示:

text_legend = {};
text_legend{1,1} = 'y1 = 2*sin(x)+0.1';
text_legend{2,1} = 'y2 = sin(x).*cos(x)+0.2';
text_legend{3,1} = 'y3 = sin(x)./(x+0.1)';
figure
set(gcf,'color','w');
hold on;
handle_plot = [];
handle_plot(1) = plot(x,y1,'-','color',[rand rand rand],'LineWidth',2);
handle_plot(2) = plot(x,y2,'-','color',[rand rand rand],'LineWidth',2);
handle_plot(3) = plot(x,y3,'-','color',[rand rand rand],'LineWidth',2);
grid on;
legend(handle_plot,text_legend,0);

带标记图片如下所示:

figure
set(gcf,'color','w');
hold on;
handle_plot = [];
handle_plot(1) = plot(x,y1,'-<','color',[rand rand rand],'LineWidth',2);
handle_plot(2) = plot(x,y2,'-s','color',[rand rand rand],'LineWidth',2);
handle_plot(3) = plot(x,y3,'-o','color',[rand rand rand],'LineWidth',2);
grid on;
legend(handle_plot,text_legend,0);


标记完全看不清 为了可以稀疏的标记出来,可以绘制为需要绘制marker的曲线单独绘制一个仅有marker的标记线,这个标记线取点也在数据中获取,不过 取点间隔比原始数据更大,如:

index = 1:50:length(x);

通过上面这个代码获取需要抽取的索引,相当于每隔50个点抽取一个数据。

figure
set(gcf,'color','w');
hold on;
handle_plot = [];handle_plot_Marker = [];
line_color = [rand rand rand];
handle_plot(1) = plot(x,y1,'-','color',line_color,'LineWidth',2);
handle_plot_Marker(1) = plot(x(index),y1(index),'<','color',line_color);
line_color = [rand rand rand];
handle_plot(2) = plot(x,y2,'-','color',line_color,'LineWidth',2);
handle_plot_Marker(2) = plot(x(index),y2(index),'s','color',line_color);
line_color = [rand rand rand];
handle_plot(3) = plot(x,y3,'-','color',line_color,'LineWidth',2);
handle_plot_Marker(3) = plot(x(index),y3(index),'o','color',line_color);
grid on;
legend(handle_plot_Marker,text_legend,0);

使用这种方法,无论在多的点,也能清洗的标定记号。

平滑一个数据量很少的曲线

此问题和上个问题正好相反,如果数据量特别少,又想绘制一个光滑的曲线,就需要进行平滑插值。 还是使用上面经过抽取的数据:

x0 = x(index);
y10 = y1(index);
y20 = y2(index);
y30 = y3(index);
text_legend = {};
text_legend{1,1} = 'y10';
text_legend{2,1} = 'y20';
text_legend{3,1} = 'y30';
figure
set(gcf,'color','w');
hold on;
handle_plot = [];
handle_plot(1) = plot(x0,y10,'-','color',[rand rand rand],'LineWidth',2);
handle_plot(2) = plot(x0,y20,'-','color',[rand rand rand],'LineWidth',2);
handle_plot(3) = plot(x0,y30,'-','color',[rand rand rand],'LineWidth',2);
grid on;
legend(handle_plot,text_legend,0)

从上面图可以看出,由于点数比较少,有明显的不平滑出现,为了使其平滑,可以使用3次样条插值。 matlab插值函数有很多,其中3次样条插值(spline)在曲线平滑上的表现是比较理想的(别用线性插值,无任何效果)。

matlab中插值函数为interp1,样式为:yi=interp1(x,y,xi,'spline'),x,y为原来的值,xi为需要插值的x值,yi为插值后的结果

y1i=interp1(x0,y10,x,'spline');
y2i=interp1(x0,y20,x,'spline');
y3i=interp1(x0,y30,x,'spline');

text_legend = {};
text_legend{1,1} = 'y1i';
text_legend{2,1} = 'y2i';
text_legend{3,1} = 'y3i';
figure
set(gcf,'color','w');
hold on;
handle_plot = [];
handle_plot(1) = plot(x,y1i,'-','color',[rand rand rand],'LineWidth',2);
handle_plot(2) = plot(x,y2i,'-','color',[rand rand rand],'LineWidth',2);
handle_plot(3) = plot(x,y3i,'-','color',[rand rand rand],'LineWidth',2);
grid on;
legend(handle_plot,text_legend,0);

可以看到,插值后的结果和之前的对比非常接近

绘制面积图

有时候,绘制类似于功率的图时,需要给底部某区域填充颜色,这时就需要使用填充图。

matlab里绘制面积图使用fill函数,fill(x,y,color)函数前两个参数一一对应组成一个点序列,如: x=[x1,x2,x3……xn],y=[y1,y2,y3……yn],fill函数将会从(x1,y1)点开始(x2,y2),(x3,y3)……绘制一个区域, 到(xn,yn)然后再连接(x1,y1),在这个封闭区域里填充颜色

下面这个例子给曲线1填充颜色:

text_legend = {};
text_legend{1,1} = 'y1 = 2*sin(x)+2.1';
text_legend{2,1} = 'y2 = sin(x).*cos(x)+2.2';
text_legend{3,1} = 'y3 = sin(x)./(x+0.1)+2';
figure
set(gcf,'color','w');
hold on;
handle_plot = [];
handle_plot(1) = plot(x,y1,'-','color',[rand rand rand],'LineWidth',2);
fill([x(1) x x(end)],[0 y1 0],[0.77,0.90,0.94]);
handle_plot(2) = plot(x,y2,'-','color',[rand rand rand],'LineWidth',2);
handle_plot(3) = plot(x,y3,'-','color',[rand rand rand],'LineWidth',2);
grid on;
legend(handle_plot,text_legend,0);

多个图需要填充时,最好把颜色设置成有透明度,这样看起来会漂亮很多, edgealpha属性和FaceAlpha属性可以用于设置填充的边界线和填充颜色的透明度

text_legend = {};
text_legend{1,1} = 'y1 = 2*sin(x)+0.1';
text_legend{2,1} = 'y2 = sin(x).*cos(x)+0.2';
text_legend{3,1} = 'y3 = sin(x)./(x+0.1)';
figure
set(gcf,'color','w');
hold on;
handle_plot = [];
line_color = [rand rand rand];
handle_plot(1) = plot(x,y1,'-','color',line_color);
fill([x(1) x x(end)],[0 y1 0],line_color,'edgealpha',0.4,'FaceAlpha',0.4);

line_color = [rand rand rand];
handle_plot(2) = plot(x,y2,'-','color',line_color);
fill([x(1) x x(end)],[0 y2 0],line_color,'edgealpha',0.4,'FaceAlpha',0.4);

line_color = [rand rand rand];
handle_plot(3) = plot(x,y3,'-','color',line_color);
fill([x(1) x x(end)],[0 y3 0],line_color,'edgealpha',0.4,'FaceAlpha',0.4);
grid on;
legend(handle_plot,text_legend,0);

matlab还是能画出比较漂亮的图的…

ps:此blog依然由matlab的publish生成,源代码地址:http://download.csdn.net/detail/czyt1988/7864013



© 著作权归作者所有

共有 人打赏支持
尘中远
粉丝 1
博文 26
码字总数 47436
作品 0
朝阳
程序员
【图像处理知识复习】01画灰度直方图matlab, C++ 实现

灰度直方图是对图像中灰度级分布的统计,横坐标为灰度值,纵坐标是像素个数(也可以采用当前像素值个数占总像素个数的百分比)。这里直接统计个数。 1. matalb代码如下: %画灰度直方图 %1, ...

jizhidexiaoming ⋅ 05/07 ⋅ 0

iPhone图形开发绘图小结

iPhone图形开发绘图教程是本文要介绍的内容,介绍了很多关于绘图类的使用,先来看详细内容讲解。 1、绘图总结: 绘图前设置: 绘图后设置: 注: 画完图后,必须 先用CGContextStrokePath来描线,...

junwong ⋅ 2012/03/01 ⋅ 0

C++与Matlab混合编程

启动CodeBlocks(SVN6688+GCC4.5.1)建立C++项目,在项目管理中项目名称上单击右键,选择最下边的Properties选项,如下图所示; 在打开的窗口中选择右下角的Project’s build options选项,如...

张明 ⋅ 2010/10/20 ⋅ 8

Android View 绘图流程

View 绘图流程 API 和 Displayer View -> Draw -> Canvas -> C API -> OpCode Byte -> IO -> GPU CARD -> Electronic signal -> Displayer Android提供了一套View机制,封装好了需要控件,只......

精通吹水 ⋅ 2016/04/20 ⋅ 0

关于opencv下bixwise_xor与matalb下bitxor运行效率的疑问

各位高人,有个问题想请教,还望解答。我刚学OPENCV,刚好用到opencv下的bitwise_xor函数,就想测试一下,该函数与matalb下的bitxor两个运行速度快慢。以下是程序: matlab code: function ...

梦石 ⋅ 2013/03/09 ⋅ 0

Android之SurfaceView使用总结

1.概念 SurfaceView是View类的子类,可以直接从内存或者DMA等硬件接口取得图像数据,是个非常重要的绘图视图。它的特性是:可以在主线程之外的 线程中向屏幕绘图上。这样可以避免画图任务繁重...

zhangyujsj ⋅ 2016/01/04 ⋅ 0

Android 自定义相机开发(三) —— 了解下EGL

胡说八道 如果要使用OpenGl来自定义相机,这个还是要了解下的。可能大多数开发者使用过OpengGL但是不知道EGL是什么?EGL的作用是什么?这其实一点都不奇怪,因为Android中的GlSurfaceView已经...

aserbao ⋅ 05/10 ⋅ 0

多线程总结

进入run()函数后,新线程就开始运行,有自己的堆栈。 出了run()函数后,新建的线程就结束,并会发出信号,可以在另外一个线程中捕获,然后响应。、 currentThreadId()和 currentThread()分别...

晨曦之光 ⋅ 2012/04/13 ⋅ 0

Python Matplotlib 绘图使用指南 (附代码)

雷锋网按:本文为雷锋字幕组编译的技术博客,原标题 Matplotlib Plotting Guide, 作者为 Prince Grover。 翻译 | 李振 于志鹏 整理 | 凡江 大多数人不会花大量时间去学 matplotlib 库,仍然...

雷锋字幕组 ⋅ 05/22 ⋅ 0

matplotlib中什么是后端

什么是后端 Created Monday 10 December 2012 在很多网上文档和邮件列表中提到了"后端",并且很多初学者会对这个术语迷惑。matplotlib把不同使用情形和输出格式作为目标。一些人用matplotli...

66号公路 ⋅ 2012/12/10 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

istio 文档

https://istio.io/docs/concepts/ https://istio.io/docs/concepts/traffic-management/handling-failures/ https://istio.io/docs/concepts/traffic-management/rules-configuration/......

xiaomin0322 ⋅ 14分钟前 ⋅ 0

编程语言的作用及与操作系统和硬件的关系

一、编程语言的作用及与操作系统和硬件的关系 作用:编程语言是计算机语言,是一种程序员与计算机之间沟通的介质,通过编程语言可以使得计算机能够根据人的指令一步一步去工作,完成某种特定...

slagga ⋅ 24分钟前 ⋅ 0

runtime实现按钮点击事件

也不能说是实现吧,,,就是有点类似于RAC里边的写法,不用给btn添加另外的点击事件,就那个add...select...这样子很不友好,来看下代码: [self.btn handleControlEvent:UIControlEventTou...

RainOrz ⋅ 25分钟前 ⋅ 0

Windows系统运维转linux系统运维的经历

开篇之前,首先介绍一下我的背景把:我是一个三线城市的甲方运维。最近,在《Linux就该这么学》书籍的影响下和朋友小A(Linux运维已经三年了,工资也比我的高很多)的影响下,决定转行。最近...

linux-tao ⋅ 25分钟前 ⋅ 0

zip压缩工具,tar打包工具

zip压缩工具 zip打包工具跟前面说到的gzip,bz2,xz 工具最大的不一样是zip可以压缩目录。如果没有安装,需要使用yum install -y zip 来安装。安装完之后就可以直接使用了,跟之前提到的压缩...

李超小牛子 ⋅ 33分钟前 ⋅ 0

使用npm发布自己的npm组件包

一、注册npm账号 官网:https://www.npmjs.com/signup 注册之后需要进行邮箱验证,否则后面进行组件包发布时候会提示403错误,让进行邮箱核准。 二、本地新建一个文件夹,cd进入后使用npm i...

灰白发 ⋅ 35分钟前 ⋅ 0

010. 深入JVM学习—垃圾收集策略概览

1. 新生代可用GC策略 1. 串行GC(Serial Copying) 算法:复制(Copying)清理算法; 操作步骤: 扫描年轻代中所有存活的对象; 使用Minor GC进行垃圾回收,同时将存活对象保存到“S0”或“S...

影狼 ⋅ 36分钟前 ⋅ 0

JVM性能调优实践——JVM篇

在遇到实际性能问题时,除了关注系统性能指标。还要结合应用程序的系统的日志、堆栈信息、GClog、threaddump等数据进行问题分析和定位。关于性能指标分析可以参考前一篇JVM性能调优实践——性...

Java小铺 ⋅ 37分钟前 ⋅ 0

误关了gitlab sign-in 功能的恢复记录

本想关sign-up的,误点了sign-in 退出后登录界面提示: No authentication methods configured 一脸懵逼.. 百度后众多方案说修改application_settings 的 signin_enabled字段; 实际上新版本字段...

铂金蛋蛋 ⋅ 37分钟前 ⋅ 0

登录后,后续请求接口没有带登录cookie可能原因

1.XMLHttpRequest.withCredentials没设置好,参考https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/withCredentials...

LM_Mike ⋅ 38分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部