图形和声音

基本画图
Plot[f,{x,xmin,xmax}]
在区间 (xmin, xmax) 上画出以 x 为自变量的方程 f 的图形
Plot[{f1,f2,},{x,xmin,xmax}]
将多个方程的图形画在一起
基本画图方程
以下将画出方程 从0 到 的范围内的图形:
你可以对有奇点的方程进行画图. Wolfram 语言会尽量选择合适的尺度:
通过使用 Exclusions 选项可以忽略图线中的奇异点:
如果要对多个方程进行画图,你可以给出一个方程列表. 各个方程将会自动被赋予不同的颜色:
下面将对微分方程求解,参见"微分方程数值解的介绍"
方程的图解:
图形选项
在 Wolfram 语言为您绘图时,必须做出多个选择. 例如需要确定应该是什么比例,应在哪里采样函数,应如何绘制轴等. 大多数时候,Wolfram 语言可能会做出不错的选择. 但是,您想为特定目的获得最好的图像,则可能需要帮助 Wolfram 语言做出一些选择.
在 Wolfram 语言函数中有通用方法来指定选项. 每个选项有特定的名称. 例如作为 Plot 函数的最后一个参数,您可以用 name->value 形式包含一系列规则,来指定不同选项的值. 任何您未给出明确规则的选项都将采用其默认的值.
Plot[f,{x,xmin,xmax},option->value]
绘图,为某个选项指定特定值
为图选择一个选项.
例如 Plot 之类的函数可以设置许多选项. 通常您仅仅需要一次使用其中几个. 如果您想优化特定的绘图,可能最好是先尝试各种选项的一系列不同设置.
每次生成绘图时,您可以指定其选项. 在"重画和组合图形"部分还将讨论如何在生成绘图后还可以再更改某些选项.
选项名
默认值
AspectRatio1/GoldenRatio
绘图的高宽比,Automatic 表示自动根据 坐标绝对值进行设置
AxesTrue
是否包括轴
AxesLabelNone
贴在轴上的标签,ylabel 指定 轴标签, {xlabel,ylabel} 指定两轴标签
AxesOriginAutomatic
轴相交的点
BaseStyle{}
用于绘图的默认样式
FormatTypeTraditionalForm
用于绘图中文本的默认格式类型
FrameFalse
是否在绘图周围加画框
FrameLabelNone
框架周围要贴的标签,从下 轴开始按顺时针顺序给出列表
FrameTicksAutomatic
有框时要画什么刻度线,None 表示无
GridLinesNone
包括哪些网格线, Automatic 自动为每个主要刻度线包括一条网格线
PlotLabelNone
要作为绘图标签打印的表达式
PlotRangeAutomatic
要包括在绘图中的坐标范围; All 表示包括所有点
TicksAutomatic
有轴时要画什么刻度线,None 表示不表示
Plot 函数的一些选项. 这些也可以在 Show 中使用.
绘图中所有选项都有其默认值:
在绘图周围的框架上绘制轴:
轴指定标签. 作为标签给出的表达式的打印方式与显示为 TraditionalForm 的 Wolfram 语言输入相同. 您可以将任何文本放置在双引号中:
您可以按任意顺序同时给出几​​个选项:
AspectRatio 选项将更改绘图的整体形状. AspectRatio 给出高度与宽度的比率. 其默认值是黄金比例的倒数,应该是最最佳的矩形形状:
Automatic
使用内部算法
None
包括该项
All
包括全部
True
执行该项
False
不执行该项
各种选项的一些常用设置.
Wolfram 语言绘制图时,会尝试将 比例设置为仅包含绘图中感兴趣的部分. 如果您的函数快速增加或具有奇异性,则将切除其过大的部分. 通过指定 PlotRange 选项,您可精确控制在绘图中包括哪些 坐标范围.
Automatic
显示大部分的点,包括感兴趣的区域(默认设置)
All
显示所有点
{ymin,ymax}
显示特定范围的
{xrange,yrange}
显示特定范围的
PlotRange 选项的设定.
PlotRange 选项的设置为图形提供了对 的明确限制. 使用所指定的 限制,将切除曲线的底部:
Wolfram 语言始终尝试将函数绘制为平滑曲线. 因此,在函数反复摆动的地方,Wolfram 语言将使用更多的点. 通常,Wolfram 语言会尝试使您对函数的采样适应函数的形式. 但是,您可以设置限制,即 Wolfram 语言对函数进行采样的精确程度.
时,函数 通常无限摆动. Wolfram 语言试图在该函数反复摆动的区域中采样更多的点,但其永远无法无限采样精确地再现该函数所需的数目. 结果导致绘图中出现了一些小问题:
重要的是要意识到,由于 Wolfram 语言只能在有限的点上对函数进行采样,因此它始终会丢失函数的功能. Wolfram 语言对功能进行自适应采样,增加了有趣特征附近的采样数量,但是仍然有可能遗漏某些部分. 通过增加 PlotPoints,可以使 Wolfram 语言在更多的点上对函数进行采样. 当然,将 PlotPoints 设置得越大,Wolfram 语言绘制任何函数(甚至是平滑函数)所花费的时间就越长.
选项名
默认值
PlotStyleAutomatic
每个曲线要使用的图形图元列表的列表(请参见 "图形指令和选项")
ClippingStyleNone
修剪曲线时要绘制什么
FillingNone
插入每个曲线下的填充
FillingStyleAutomatic
用于填充的样式
PlotPoints50
采样函数的初始点数
MaxRecursionAutomatic
允许的最大递归细分数
Plot 函数的更多选项,这些在 Show 函数中不能使用.
PlotStyle 指定一条虚线曲线:
绘制多个函数时,列表中的 PlotStyle 设置将依次用于每个功能:
PlotStyle 包含子列表时,将合并设置:
默认情况下,设置 PlotRange 时不显示任何内容,以便其剪切曲线:
ClippingStyle 设置为 Automatic 会在虚线被切除的地方绘制一条虚线:
ClippingStyle 设置为列表可定义在顶部和底部切除的零件的样式:
这指定曲线和 轴之间的填充:
可以将填充指定延伸到任意高度,例如图形的底部. 填充颜​​色会在其重叠的位置自动混合:
指定仅用于第一条曲线的特定填充:
显示从第一条曲线到第二条曲线,使用非默认样式的填充:
重画和组合图形
Wolfram 语言保存着用户所画的每一个图形的信息,可使用户能过后重画. 重画图形时,可以改变一些已使用的选项.
Show[plot,option->value]
改变选项重画图形
Show[plot1,plot2,]
将若干图形画在一起
GraphicsGrid[{{plot1,plot2,},}]
画图形列阵
InputForm[plot]
显示某个图形的文本描述信息
处理图形的函数.
一个简单图形:
重画图形时可以改变一些选项. 此处改变了 标尺的选择:
画出上面的图线,并改变了其中的另一选项:
通过使用带有不同的选项序列的Show, 用户可以用不同的方式察看同一个图形. 例如,当试图找出选项的最好设置时,用户会这样做.
也可以用 Show 将图形组合在一起. 组合后的图形中所有的选项均与 Show 表达式中第一个图形的选项一致.
gj0 代表 的图形:
  的图形:
Plot 指定了每一幅图形的 PlotRange
PlotRange 覆盖了gj0 的设定值:
Wolfram 语言的所有图形都是表达式,起操控方式与其他表达式相同. 这些操控不要求使用 Show.
gj0 所代表的图形表达式中的所有符号 Line 用符号Point 取代:
使用Show[plot1,plot2,] 用户可以将多幅图形画在一起. GraphicsGrid 允许用户以阵列形式画出多幅图形.
GraphicsGrid[{{plot11,plot12,},}]
画图形方阵
GraphicsRow[{plot1,plot2,}]
在一行画几个图形
GraphicsColumn[{plot1,plot2,}]
在一列画几个图形
GraphicsGrid[plots,Spacings->{h,v}]
指定图形之间的水平和垂直距离
画图形方阵.
将上面的图形显示在一个阵列中:
如果使用 Show 重新显示一个图形阵列,指定的任何选项将用于整个阵列,而不是个别图形:
缺省的 GraphicsGrid 在阵列中每个图形的周围只留出狭窄的空白边缘. 用户可以通过设置选项Spacings->{h,v} 改变边缘的大小. 参数 hv 给出要用的水平和垂直空间. 缺省的 Spacings 选项使用字体缺省的字符的宽度和高度来调整参数 hv ,但是使用 Scaled 坐标往往更有效. Scaled 给出高度和宽度,值 1 代表一个单元格的宽度和高度.
这里将阵列中图形间的水平间隙增大了,将垂直间隙减小了:
在画图的时候 Wolfram 语言保存了所使用的点的列表及其他一些信息. 利用所保存的信息,可以用 Show 画出不同方式的图形. 但是用户应当意识到无论指定什么选项,Show 画图时所使用的基本点集是相同的. 例如,如果设置选项使Wolfram 语言显示原图放大后的一小部分,用户或许会看到 Plot 使用的一个个样本点. 类如 PlotPoints 这样的选项只能在最初的 Plot 命令中设置. (Wolfram 语言总是使用实际上已有的点画图; 避免使用平滑或样条曲线,因为那样会给出数学图形的误导结果.)
一个简单的图形:
显示该图形放大后的一小部分. 在这种分辨率下,用户能看到由最初的 Plot 命令生成的逐个的线段:
三维曲面绘图
Plot3D[f,{x,xmin,xmax},{y,ymin,ymax}]
画出以 xy 为自变量的函数 f 的图形
基本的三维绘图函数.
画出函数 的三维图形:
将鼠标在图形内部拖动,用户可以对三维图像进行旋转. 在图像内部拖动鼠标使得图像跟随鼠标移动方向翻滚,在图像边缘拖动鼠标使得图像在显示屏的平面上旋转. 按住 Shift 键拖动图像设的图像平移. 用 Ctrl 键使图像放大或缩小.
在 Wolfram 系统中,三维图形有许多选项. 本节讨论部分选项,其余的将在 "图形和声音的结构" 中讨论.
三维绘图的第一个选项集非常类似于二维绘图中提供的选项.
选项名称
缺省值
AxesTrue
是否包含坐标轴
AxesLabelNone
坐标轴上加标签: zlabel 指定 轴的标签,{xlabel,ylabel,zlabel} 指定每个轴的标签
BaseStyle{}
绘图使用的系统默认风格
BoxedTrue
是否在曲面周围画三维盒框
FaceGridsNone
在盒框的边界面上画网格的方式;All 表示在每个面上都画网格
LabelStyle{}
标签风格
LightingAutomatic
使用模拟光线给区面上光
MeshAutomatic
是否在曲面上画出 网格分隔线
PlotRange{Full,Full,Automatic}
或其他值的范围
SphericalRegionFalse
指定是否使得一个围绕该三维边界盒子外侧的球面能装入最终显示的区域
ViewAngleAll
视野角度
ViewCenter{1,1,1}/2
中心显示点
ViewPoint{1.3,-2.4,2}
观察曲面的视点
ViewVectorAutomatic
模拟相机的位置和方向
ViewVertical{0,0,1}
垂直方向
BoundaryStyleAutomatic
如何画曲面的边界线
ClippingStyleAutomatic
如何画曲面剪切区域
ColorFunctionAutomatic
如何确定曲面颜色
FillingNone
曲面下方进行填充
FillingStyleOpacity[.5]
填充风格
PlotPoints25
每个方向上对函数采样的点数; 指定 方向的不同点数
PlotStyleAutomatic
曲面风格的制图命令
Plot3D 的一些选项. 第一部分也可在 Show 中使用.
改变选项重画上述图形. 通过这样设置 PlotRange,仅在 范围内的部分图形被显示:
Plot3D 中的 ClippingStyle 选项可用于剪切区域的填充:
画初始的图形时,可以选取较多的采样点. Wolfram 系统能够灵活地调整对图形的采样,在图形波动大的部分增加采样点数,但有些时候还是需要用户来指定更多的点数:
同一个图形加上了坐标轴的标签,并在每个面上添加了网格:
确定在什么位置进行观察或许是画三维曲面最重要的一点. Plot3DShowViewPoint 选项允许用户指定观察曲面的空间点 . 关于如何定义该点所用的坐标系将在 "三维图形的坐标系" 一节中详细讨论. 用鼠标旋转图像时,用户实际上是在调整 ViewPoint 的值.
一个从缺省的视点 {1.3,-2.4,2} 观察的曲面. 这个视点被选成 "一般的",所以由对象不同部分的重叠引起视觉混乱是不可能的:
重画该图形,视点在正前方. 注意透视画的效果,使得盒框的后部看起来比前部小:
ViewPoint 选项也接受代表通用视点的符号值:
{1.3,-2.4,2}
缺省的视点
Front
向前,沿着 的负方向
Back
向后,沿着 的正方向
Above
向上,沿着 的正方向
Below
向下,沿着 的负方向
Left
向下,沿着 的负方向
Right
向下,沿着 的正方向
ViewPoint 选项的典型值.
人的视觉系统不是特别善于理解复杂的数学曲面. 因此需要生成包含反映曲面形状的尽可能多的线索的画面.
视点稍微在曲面上方通常效果最好. 一般保持视点足够靠近有透视画法效果的曲面是个好主意. 明确画出围绕曲面的盒框对辨别曲面的方位是有帮助的.
对曲面透视图选项取缺省值的图形:
显示不画网格的上述曲面. 通常没有网格,看清曲面的形状会困难得多:
为了增加三维图形的逼真程度,Wolfram 系统缺省地使用模拟光照模型给三维曲面着色. 缺省情况下,Wolfram 系统假设有四个光源,并且在对象上有照明设备. "亮度和曲面特性" 将介绍如何设置其他光源,以及如何指定对象的反光属性.
光照也可以用一组代表光学特征的字符串来指定. 例如设置 Lighting->"Neutral" 使图像使用白光,这样做可使图像真实地在黑白输出设备如打印机上再现.
ColorFunction 选项的缺省设置是 Lighting->"Neutral" 这样曲面的颜色就不会被彩光所歪曲:
数据列表的绘图
Wolfram 语言可以用来画函数的图形. 用户给出一个函数,Wolfram 语言通过计算函数在许多点上的值来生成曲线或曲面.
本节介绍如何根据数据列表,而不是函数来绘制图形. ("导入和导出数据" 讨论如何从外部文件或程序中读取数据). Wolfram 语言对数据列表的绘图命令与上面讨论的对函数的绘图命令是类似的.
ListPlot[{y1,y2,}]
x 值为 1,2, 处画 y1,y2,
ListPlot[{{x1,y1},{x2,y2},}]
画点 (x1,y1),
ListLinePlot[list]
用线将点连起来
ListPlot3D[{{z11,z12,},{z21,z22,},}]
画出高度为 zyx 的数组的三维图形
ListPlot3D[{{x1,y1,z1},{x2,y2,z2},}]
{xi,yi} 处画出高度为 zi 的三维图形
ListContourPlot[array]
画等高线图
ListDensityPlot[array]
画密度图
数据列表绘图函数.
一列值:
画出这些值的图形:
用线将点连起来:
当为多组数据画图时,Wolfram 语言自动为各组数据选择不同的颜色:
给出 对的列表:
画这些点的图形:
给出一个长方形数值阵列. 此阵列是相当大的,所以使用分号结尾以阻止结果被显示出来:
画出该数值阵列的三维图形:
画出该数值阵列的密度图:
参数图形
"基本画图" 讨论了当给定作为 的函数的 坐标时,如何使用 Wolfram 语言绘制曲线. 用户也能使用 Wolfram 语言绘制参数图形. 在绘制参数图形时,用户给出每个点的 坐标,作为第三个参数,比如 ,的函数.
ParametricPlot[{fx,fy},{t,tmin,tmax}]
画出参数图形
ParametricPlot[{{fx,fy},{gx,gy},},{t,tmin,tmax}]
把多个参数曲线画在一起
生成参数图形的函数.
坐标为 Sin[t] 坐标为 Sin[2t] 而生成的曲线:
ParametricPlot3D[{fx,fy,fz},{t,tmin,tmax}]
画出三维曲线的参数图形
ParametricPlot3D[{fx,fy,fz},{t,tmin,tmax},{u,umin,umax}]
画出三维曲面的参数图形
ParametricPlot3D[{{fx,fy,fz},{gx,gy,gz},},]
把多个图形画在一起
三维参数图形.
画三维曲线的 ParametricPlot3D[{fx,fy,fz},{t,tmin,tmax}] 完全类似于画二维曲线的 ParametricPlot[{fx,fy},{t,tmin,tmax}]. 两种情况下,Wolfram 语言都通过改变参数 t 生成一系列的点,然后连接这些点形成曲线. ParametricPlot 用于生成二维曲线;ParametricPlot3D 用于生成三维曲线.
画出螺旋线的参数图形. 变动 t 产生 - 平面的圆周运动和 方向的直线运动:
ParametricPlot3D[{fx,fy,fz},{t,tmin,tmax},{u,umin,umax}] 创建一个曲面,而不是曲线. 该曲面由四边形的集合组成,这些四边形的四个角的坐标相应于 tu 在规则的网格上取值时的 fi 的值.
四边形的 坐标由 tu 简单地给出. 结果是一个能由 Plot3D 生成的曲面图形:
显示和前面相同的曲面,但是对 进行了二次变换:
通过取前面的螺旋线并在其上每一段画一个四边形生成一个螺旋面:
一般使用 ParametricPlot3D 能够构造复杂的曲面. 在各种情况下,用户可以把曲面看作是通过用某个确定的方法 扭曲 或者 旋转 - 坐标网格而形成的.
产生一个圆柱面. 变化参数 t 产生 - 平面上的一个个圆周,而变化参数 u 使这些圆周在 方向上移动:
生成一个圆环面. 变化 u 产生一个圆周,而变化 t 使圆周绕 周旋转而形成一个圆环:
生成一个球面:
应当认识到当用 ParametricPlot3D 画曲面时,参数化方法的精确选择往往是至关重要的. 例如,用户应当小心避免使参数法画出的曲面被全部或部分覆盖次数大于1. 多次覆盖常常导致在曲面上画的网格不连贯,并且可能使ParametricPlot3D 花费更长的时间来画出曲面.
一些特殊图形
正如在 "图形和声音的结构" 一节中所讨论的那样,Wolfram 语言包含了一个完备的图形编程语言. 用这个语言,可以建立许多不同类型的图形.
LogPlot[f,{x,xmin,xmax}]
生成线性-对数图
LogLinearPlot[f,{x,xmin,xmax}]
生成对数-线性图
LogLogPlot[f,{x,xmin,xmax}]
生成对数-对数图
ListLogPlot[list]
生成数据列表的线性-对数图
ListLogLinearPlot[list]
生成数据列表的对数-线性图
ListLogLogPlot[list]
生成数据列表的对数-对数图
DateListPlot[list]
生成带有日期坐标的数据列表的图形
DateListLogPlot[list]
生成带有日期坐标的数据列表的线性-对数图
PolarPlot[r,{t,tmin,tmax}]
生成半径 r 为角度 t 的函数的极坐标图形
SphericalPlot3D[r,{theta,min,max},{phi,min,max}]
生成三维球面的图形
RevolutionPlot3D[f,{t,tmin,tmax}]
生成一个三维回转面
BarChart[list]
画出一列数据的直方图
PieChart[list]
画出一列数据的圆饼图
一些特殊绘图函数.
一个指数函数:
生成该函数的线性-对数图和对数-线性图:
收集一些金融时间序列数据:
画出这些金融数据在线性和对数刻度下的图形:
使用 RevolutionPlot3D 使曲线围绕 轴旋转:
前 10 个素数的列表:
素数的直方图:
圆饼图:
Wolfram 系统的 标准程序包 中定义了一些可用的绘图函数.
ErrorListPlot[{{x1,y1,dy1},}]
生成带有误差棒的图形
BoxWhiskerPlot[list]
生成数据的箱线图
ParetoPlot[list]
生成数据的Pareto图形
PairwiseScatterPlot[data]
生成多变量数据的成对坐标
Wolfram 系统的 standard extra packages 软件包中的一些绘图函数.
ErrorListPlot 被包含在 Error Bar Plotting Package 软件包中:
画出一组数据及其误差:
生成一个样本为正态分布的箱线图:
一组由字母 a 到 f 组成的随机数据:
生成了该组数据的Pareto图形:
PairwiseScatterPlot 可以用来画出三变量数据的每一对坐标下的图形:
声音

声音播放

在大多数计算机系统上,Wolfram 系统不仅能生成图形,也能生成声音. Wolfram 系统处理图形和声音的方法是非常类似的.
例如,正如能使用 Plot[f,{x,xmin,xmax}] 画函数的图形一样,用户也能使用 Play[f,{t,0,tmax}]演奏一个函数. Play 采用函数来定义声音的波形:函数值给出作为时间函数的声音的振幅.
Play[f,{t,0,tmax}]
播放振幅为时间 t 的函数 f 的声音,以秒为单位
播放函数的声音.
在合适的计算机系统上,这将演奏出1秒钟的纯音调,其频率为440Hz:
Play 生成的声音可以有任何波形. 例如,不必由谐波的集合组成. 一般地,用户给 Play 定义的振幅函数指定了相应于声音的瞬时信号. 这个信号被转换成电压和位移. 注意振幅有时被定义成声音对应的峰值信号;在 Wolfram 系统中,总是作为时间函数的瞬时信号.
播放一个更复杂的声音:
Play 被设置成其中的时间变量总是用绝对时间秒来度量. 当实际播放一个声音时,振幅每秒钟按一定的次数来采样. 用户可以通过设置选项 SampleRate 指定采样率.
Play[f,{t,0,tmax},SampleRate->r]
播放声音,每秒钟进行 r 次采样
指定声音的采样率.
通常,采样率越高,声音中的高频成分被演奏的效果越好. 采样率 r 一般允许的频率范围不超过 Hz. 人类的听觉系统一般能分辨的音频范围是20~22000Hz (这依赖于年龄和性别). 钢琴上88个音符的基本频率的范围是27.5~4186Hz.
光盘播放机(CD)的标准采样率是44100Hz. 在一般电话系统中的有效采样率在8000左右. 大部分计算机系统中,Wolfram 系统所用的采样率也在8000左右.
可以用 Play[{f1,f2,] 产生立体声. Wolfram 系统通常可以支持任意数量的声道.
ListPlay[{a1,a2,},SampleRate->r]
用一系列振幅级播放声音
播放采样的声音.
函数 ListPlay 允许用户简单地给出一列值,这些值可以被作为按一定频率采样的声音的振幅.
播放根据随机值产生的噪声:
Wolfram 系统在实际播放声音时,仅允许一定振幅范围的声音. 在 PlayListPlay 中的选项 PlayRange 指定怎样对所给振幅进行处理以适应给定的范围. 该选项的设置与 "图形选项" 一节中所讨论的图形选项 PlotRange 的设置类似.
PlayRange->Automatic
用一个内部过程来调整振幅
PlayRange->All
将所有振幅调整到允许范围内
PlayRange->{amin,amax}
使 aminamax 之间的振幅调整到允许的范围内,并剪掉其余的部分
指定声音振幅的调整.
尽管用缺省设置 PlayRange->Automatic 通常是很方便的,用户应当认识到如果明确指定了 PlayRangePlay 的运行速度会显著加快,因为不需要推导 PlayRange.
EmitSound[snd]
计算时播放声音
以编程方式播放声音.
Sound 对象的输出格式通常被设置为一个可视化的按键,当其被按压时,开始播放声音. 使用 EmitSound,声音可以在无需用户干涉或生成输出结果的情况下播放. 在按压 Sound 键时,内部执行程序实际上是使用的 EmitSound.
Sound 对象的内部结构在 "声音的表示" 一节中讨论.