编程渣的艰难探索之Matlab绘图
个人需求:用matlab绘制多条曲线并在指定不规则区域填色。
为什么一定要用Matlab呢?因为我觉得图形便于修改,看起来较为正规,代码量较少。
1 同时绘制多条曲线
1.1 基本代码(真的很基础)
x=0:0.005:5; %限定精度和范围(此处x在0到5之间取值,精度0.005)
y1=x; %函数表达式1
plot(x,y1,'black','k--','HandleVisibility','off'); %绘图
hold on; #在同一张图上继续操作
x=0.945:0.005:5;
y2=(0.4*x)./(-6.8+7.2*x); %函数表达式2
plot(x,y2,'red','HandleVisibility','off');
其中有几个需要注意的点:
(1)不显示某个标签:在plot函数里插入'HandleVisibility','off'
;
(2)plot之后可以设定颜色或者线的形式,比如'black','k--'
,黑色虚线;
(3)如果要在同一个图窗内作图就一定得加hold on
或者建立一个图窗逐步添加元素;
(4)出图之后,在figure窗口打开“编辑”,选择“图窗属性”,可以满足大多数所需的修图功能。
1.2 可能会遇到的问题
(1)出的图没有自己需要的部分:“图窗属性”中调整坐标轴的范围;
2 不规则区域填色
这里讨论的所有填色区域都是不规则区域,所以不考虑函数本身。
2.1 基本代码
总的来说就是以横纵坐标来圈定范围。
x=0.5:0.005:1;
y3=(6.8*x)./(-0.4+7.2*x);
plot(x,y3,'blue');
fill([0.5 0.5 x 1],[0.5 1.0625 y3 1],[0.7 0.7 0.7]);
其中有几个需要注意的点:
(1)fill函数可以有效的依据自己的需求进行填色,fill([横坐标],[纵坐标],[色彩RGB])
,fill([1 1.1 1.1],[1 1.1 1],'r','facealpha',0.1)
,透明度0-1之间取值,越大越透明。
坐标顺序:关于“顺时针?”和“逆时针?”的问题我目前还没有找到确切的说法,绘制的时候经常是两个都尝试,可能会得到目标图形。
(2)依然可使用hold on
。
(3)可填色之后重新绘制边界线,因为填充的这部分可能会盖住之前的线。
2.2 可能会遇到的问题
(1)向量长度
问题:如图所示
原因:之前限定取值范围时设定了一定的精度,“工作区”可以看到“值”,之后可能限定了其他的取值,之前定义的函数就会出现向量长度不匹配的问题。
解决方法:清空工作区,或者在输入新取值范围或精度后重新输入函数。
(2)图形与预设不符
问题:Matlab填色的区域或变多或少,反正就不是自己要求的部分。
解决:
- 检查代码:多检查检查吧;
- 可以通过限定范围
xlim([0 5])
及ylim([0 6])
,或者x=1:0.2:3
之类的将绘图区域限定在一个更小的范围,这种问题主要出现在一些非线性函数中。
- 清空工作区再尝试一遍;
- 如果还是有问题,关闭Matlab,明天再来(没开玩笑)。
(3)填不了颜色:提示什么点的数量不同……(没解决,第二天自己好了)
关于代码,有时候前一阵还运行的好好的程序,再来一遍就出现了报错或者莫名其妙的问题,解决不了就停下来,绝望的时候重启一下或者明天再来,有时候就 它 自己 又 可以 了:-)