如您有如何复制粘贴日志内容到BLOGSPOT并保留图片URL的建议,还望不吝赐教。
Mathematica 是理论家的最爱。她是符号计算,同时也是几大科学作图工具之一。其虽然功能强大,但就作图而言,却并不直观,且需一定的编程技巧,往往让人望而生畏。本文知难而进,目标是介绍并总结一些重要的Mathematica作图方法。
1)作图之基本
一般来说,科学计算只需要Mathematica 的两个作图函数:
Plot[f(x),{x,xmin,xmax},options] 和 Plot3D[f(x,y),{x,xmin,xmax},{y,ymin,ymax},options]
如下:

或者:

毫无疑问,这两张图非常难看,是不可能拿出去丢人的。这表明,为了作图,懂得这两个函数还远远不够。
2)控制格式
我们首先尝试美化上面2个图。第一个图y轴的那个峰被截掉了,我们要把它画全,因此加入PlotRange-> All 的选项:

第二张3D图,除了要PlotRange以外,还必须增加作图的精度,使图像更细致圆滑。为了做到这一点我们使用PlotPoints->100 这个选项:
当然,为了去掉网格,还可以加入Mesh->None。其它基本的自定义操作可在MATHEMATICA的档案文件中查找。本文接下来主要介绍档案文件中不存在的内容。
3)上色
Mathematica使用 PlotStyle 或者 Colorfunction 这两个options 给图形上色。下面我们分别举例:
以第一个SINC函数为例,如果需要指定线条的颜色,例如橙色,我们只需要加入
PlotStyle->Orange 即可:

不过有时候,我们需要作图的颜色和每个点的值有关,例如,希望线段的颜色和y的值成正比,则可以:

此ColorFunction 将y轴的值NORMALIZE到1和0,再加给Hue返回颜色。Hue[0]到Hue[1]返回的是一个彩虹色。如果不需要彩虹色,还可以用RGB等其他函数,或者自带的ColorData 来做,具体参见软件文档。
以第二个3D 下的含参SINC函数为例,同样我们也可以让它的颜色和z值相关。但有时候,我们并不需要把整个图形染色,我们只需要标注满足某些条件的点,让他们更显眼。由此,我们可以自定义ColorFunction函数如下:


其中color1是一个自定义的functional 函数。If是条件语句。更为复杂的条件语句可以用Mathematica自带的其他函数来实现,例如以下:

这是一个标注一个腔所有阶谐振模的作图。其中X轴是波长,Y轴是腔长。
4)利用Functional作图
有的时候,我们需要在一张图标中做一系列图,他们分别代表着不同的参数。除此之外,我们还需要一一系列相应的颜色进行区分。
这时候,我们就可以利用Mathematica强大的Functional 功能,将我们的作图函数Plot也写成一个带参量的函数:
首先我们需要用到Show函数来合并视图;
然后,我们将Plot函数本身写成 Functional 的形式:

这里,#就是Functional 中的参变量,注意到我们同时把这个参数传递给了颜色函数Hue,并且做了归一化。其中Hue@#就是Hue[#]的后缀写法。最后,在整个Plot[]的括号后面,我们写上&, 表明这是一个Functional。再后的/@是Apply All, 也就是把@后面的一列表参数全部传给定义的Functional,最后由Show合并作图。下图就是结果。

实际上,我们可以同时传递多个参数,分别可以用#1,#2,#3等表示,最后的传递函数不用/@而是用@@@


注意我们自定义了PlotRange
5) 复变函数的上色
复函数因为其2维特性,使得其数据可视化变得比较困难。一般而言,对于一个复函数z(x+iy),我们只能取其辐值或者辐角作图,有没有一种可能,让我们在取其辐值的时候,又能根据其辐角上色,这样就能毫无损失的表达信息了呢?
因为辐角信息并不存在于作图函数(x,y,z)中,因为上述的ColorFunction方法失效了。然而Mathematica提供了丰富灵活的变量解析(Scoping),能让我们将辐角信息储存在内部变量中,并传递给作图函数上色,具体做法如下:
利用Block做本地变量解析:


6)自定义作图标记
在第四部分我们介绍了利用Functional 特性同时作图的方法,这些图有些时候还需要文字标记,如何迅速部署文字标记并将其和Functional 特性整合起来呢?

我们在Show中加入Graphics函数,插入所需的标记。这些标记的位置分散在x轴和对应的y值处。当然这样的标记也足够麻烦的。。。到此,Mathematica作图的局限性也开始体现。

全文完
2013
BO