前言:在上一节中,我们学习了线型图的绘制方法,在本节中我来给大家分享不等式区域图的绘制方法,我们希望达到的效果如下:
参考文献:Balasubramanian, G., & Ponnachiyur Maruthasalam, A.P. (2023). Impact of store brand competition on retailer's strategic inventory in decentralized supply chains. Naval Research Logistics (NRL), 71, 161 - 173.
二、不等式区域图
在绘制不等式区域图时,绘制的对象函数中应当包括两个参数,对于多余的参数需要事先赋值,绘制不等式区域需要用到的函数是RegionPlot,它的操作格式是RegionPlot[函数, {参数1,范围}, {参数2, 范围}],下面给出示例代码:
y1 = 3 x1^2 + 5 x2 - 4 (*定义函数*)
RegionPlot[y1 > 0, {x1, -2, 2}, {x2, -2, 2}]
代码运行的结果如下:
恭喜你,在理解上述函数的格式后,现在你已经掌握了绘制不等式区域图的方法了,但是我们发现,这样的区域图还是不够美观,而且很难读出图中包括的信息。要优化这张图,我们可以从下面几个角度入手:(1)添加图例;(2)修改区域分割线;(3)修改不等式区域颜色。
首先我们学习如何添加图例,和线型图一样,我们可以使用Labeled函数、Callout函数、 PlotLegends函数以及Legends函数。
(i)Labeled函数:Labeled函数的运行格式是RegionPlot[ Labeled[函数, "标签内容", 放置位置], {参数1,范围}, {参数2,范围}],注意Labeled函数的放置位置包括center(居中)、上方(Top)、下方(Bottom)、左侧(Left)以及右侧(Right),下面给出示例代码:
RegionPlot[Labeled[y1 > 0, "标签内容", Center], {x1, -2, 2}, {x2, -2, 2}]
代码的运行结果如下:
(ii)Callout函数:Callout函数在添加标签时会出现支线,它的运行格式是RegionPlot[ Callout[函数, "标签内容", 放置位置],下面给出示例代码:
RegionPlot[Callout[y1 > 0, "标签内容", {0, 0}], {x1, -2, 2}, {x2, -2, 2}]
代码运行结果如下:
(iii)PlotLegends函数:PlotLegends函数在添加标签时,会将函数内容作为标签,它的具体运行格式为RegionPlot[函数, {参数1, 范围}, {参数2, 范围}, PlotLegends -> "标签内容"],注意PlotLegends函数默认的添加标签的位置是图像右侧,如果想要修改位置可以用Placed函数,Placed函数的格式是Placed[标签内容, 位置],下面给出示例代码:
RegionPlot[y1 > 0, {x1, -2, 2}, {x2, -2, 2}, PlotLegends -> Placed[y1, Below]]
代码运行结果如下:
(iv)Legends函数:Legends函数的格式与Labeled函数类似,但是在添加标签时会将标签置于右侧,它的运行格式是RegionPlot[Legended[函数, "标签内容"], {参数1,范围}, {参数2, 范围}],下面给出示例代码:
RegionPlot[Legended[y1 > 0, "标签内容"], {x1, -2, 2}, {x2, -2, 2}]
代码运行结果如下:
在添加了区域图例后,可以发现图像具有了一定的可读性,至少我们已经知道了不同区域代表着什么,但是对于横纵坐标,我们依然不知道它的具体含义,所以我们可以通过FrameLabel函数来为坐标轴添加标签,FrameLabel函数的具体格式是FrameLabel-> {"标签1","标签2“},如果想调整标签的字体和大小,可以直接修改函数中标签的字体,下面我们给出示例代码:
RegionPlot[Legended[y1 > 0, "标签内容"], {x1, -2, 2}, {x2, -2, 2}, FrameLabel -> {"横坐标(x1)", "纵坐标(x2"}]
代码运行结果如下:
尽管现在图像具备了可读性,但是它依然不够美观,接下来我们可以修改区域的分割线,使图像看起来更加柔和,修改分割线可以使用BoundaryStyle函数,它的具体格式是BoundaryStyle -> 指令,如果输入None可以消除分割线,要添加多个指令可以使用Directive函数,它的具体格式为Directive[指令1, 指令2, ....],下面给出示例代码:
RegionPlot[Legended[y1 > 0, "标签内容"], {x1, -2, 2}, {x2, -2, 2}(*添加区域标签*),
FrameLabel -> {"横坐标(x1)", "纵坐标(x2)"}(*添加坐标标签*),
BoundaryStyle -> Directive[Black, DotDashed, Thin]](*修改分割线*)
代码运行结果如下:
在学会了如何修改分割线后,我们距离目标又进了一步, 有时候我们需要绘制多个函数的图像,想要区分不同的区域,我们可以为不同区域设置颜色,设置颜色可以使用PlotStyle 函数,它的运行格式为PlotStyle -> {颜色1,颜色2, ...},下面给出示例代码:
RegionPlot[
Legended[
y1 > 0 && 0 < x1 < x2/2 || y1 > 0 && x2/2 < x1 < x2/2 ||
y1 > 0 && x1 < 0, "标签内容"](*为函数添加标签"), {x1, -2, 2}, {x2, -2, 2}(*参数范围*),
FrameLabel -> {"横坐标(x1)", "纵坐标(x2)"}(*添加坐标轴标签*),
BoundaryStyle -> Directive[Black, DotDashed, Thin](*修改分割线样式*),
PlotStyle -> {Gray}(*修改区域颜色*)]
代码运行结果如下:
以上就是本节要学习的全部内容,具体包括如何绘制不等式区域图,添加图例,修改分割线样式以及如何修改不等式区域颜色,经过上述的学习,相信你已经懂得了如何绘制比较美观的区域图,接下来我们来复现这篇论文中出现的区域图。
首先,我们定义要绘制图像的函数:
然后我们开始绘制图像,注意函数中包括三个参数,所以我们需要将c赋值,本例中c=0.2,下面是操作代码:
代码运行结果如下:
以上就是本文的全部内容,希望能对你有所帮助,有问题欢迎私信博主,看到后就会解答,谢谢大家!