二维图形的坐标系

Mathematica 中产生图形对象时, 用户给出所出现的各种图形元素的坐标. 当 Mathematica 绘制图形对象时, 它必须把原始坐标转换为 "显示坐标", "显示坐标"指明每个图形元素应该放置在最终显示区域的哪一个地方.

PlotRange->{{xmin,xmax},{ymin,ymax}}包含在图形中的原始坐标的范围

决定由原始坐标到显示坐标如何转换的选项.

Mathematica 绘制图形对象时, 它首先要搞清楚实际显示的 的原始坐标范围. 在这个范围之外的任何图形元素都会被剪切而不显示.

选项 PlotRange 指明了要包含的原始坐标范围. 正如在 "图形选项" 所讨论的, 缺省设置是PlotRange->Automatic, 这使得 Mathematica 选择的范围能在去掉"异常值"的同时, 尽量包括图形中所有"令人感兴趣"的部分. 通过设置 PlotRange->All, 可以使 Mathematica 包括所有点. 用户也可以指明要包括的坐标范围.

这里建立一个顶点坐标大致都在 内的多变形对象.
In[1]:=
Click for copyable input
这种情况下,多变形对象几乎填满了全部显示区域.
In[2]:=
Click for copyable input
Out[2]=
给出一个明确的 PlotRange, 可以使用户将图形的某一部分放大.
In[3]:=
Click for copyable input
Out[3]=
AspectRatio->r定义显示区域图形的高宽比为 r
AspectRatio->Automatic按原始坐标系确定显示区域的形状

确定显示区域的形状.

到此为止,我们所讨论的是 Mathematica 如何将用户给定的原始坐标转换成最终显示区域的位置. 接下来要讨论的是最终显示区域的形状.

大多数计算机系统有确定的屏幕或纸张输出区域,Mathematica 的显示区域必须与之匹配. 如何填充这些区域由形状和纵横比确定. 通常, 选项 AspectRatio 定义最终显示区域的纵横比.

重要的一点是要注意设定的 AspectRatio 不影响尺度或显示坐标的含义. 在显示区域内这些坐标总是从0到1变化. AspectRatio 所改变的是这个显示区域的形状.

在二维图形中, AspectRatio 的缺省设置是 Automatic. 这样图形所用的纵横比由原始坐标系决定, 而非一个固定值. 原始坐标系中的 方向的一个单位与最终显示区域中 方向的一个单位的距离相同. 这样, 用户在原始坐标系中定义的对象按其"自然形状"显示.

这里生成了一个对应于正六边形的图形对象. 用缺省设置 AspectRatio->Automatic, 最终显示区域的纵横比由原始坐标系确定, 并且该六边形按其"自然形状"显示.
In[4]:=
Click for copyable input
Out[4]=
这里在显示区域画出了高度为宽度三倍的六边形.
In[5]:=
Click for copyable input
Out[5]=

有些时候直接给定图形元素的显示坐标会更方便. 要做到这一点, 可以使用尺度坐标 Scaled[{sx, sy}] 而非 . 尺度坐标在 方向上的变化范围均是从 0 到 1, 原点选在图形范围的左下角.

{x,y}原始坐标
Scaled[{sx,sy}]图形范围上的尺度坐标
ImageScaled[{sx,sy}]显示区域上的尺度坐标

二维图形的坐标系.

这里由于框架标签使得显示区域明显比画图范围大.
In[6]:=
Click for copyable input
Out[6]=
使用 Scaled 尺度坐标, 矩形中心在原点, 也在指定画图范围的中心.
In[7]:=
Click for copyable input
Out[7]=
使用 ImageScaled 坐标, 矩形恰好在图形的中心, 但不与绘图范围的中心重合.
In[8]:=
Click for copyable input
Out[8]=

使用 Scaled[{sx, sy}] 或者 ImageScaled[{sx, sy}], 用户或者完全用原始坐标或者完全适用尺度坐标来定位. 然而有时会需要混合使用这些坐标系. 例如, 用户想要在某一点处画一条线,而线段长度与图形宽度成一定比例, 这就需要使用原始坐标指定线的基本位置,而用尺度坐标来指定它的长度.

Scaled[{dsx, dsy}, {x, y}] 可用于指定一个用原始和尺度坐标共同确定的位置. 这种情况下, 用原始坐标给出位置, 而 用尺度坐标给出从该位置算起的偏距.

Circle[{x,y},Scaled[sx]]半径以图形范围的宽度加刻度的圆环
Disk[{x,y},Scaled[sx]]半径以图形范围的宽度加刻度的圆盘
FontSize->Scaled[sx]字体大小以图形范围的宽度加刻度

Scaled 可用于单一自变量的一些场合.

圆环的半径和字体的大小都在 Scaled 中给出值.
In[9]:=
Click for copyable input
Out[9]=
Scaled[{sdx,sdy},{x,y}]从原始坐标的尺度偏距
ImageScaled[{sdx,sdy},{x,y}]从原始坐标的图像尺度偏距
Offset[{adx,ady},{x,y}]从原始坐标的绝对偏距
Offset[{adx,ady},Scaled[{sx,sy}]]从尺度坐标的绝对偏距
Offset[{adx,ady},ImageScaled[{sx,sy}]]从图像尺度坐标的绝对偏距

偏距的位置.

这里每条线有六个打印机点数的绝对长度.
In[10]:=
Click for copyable input
Out[10]=
可以在 Circle 内部使用 Offset, 仅用一个自变量画出绝对半径为一定值的圆环.
In[11]:=
Click for copyable input
Out[11]=

对于大部分的图形,用户通常希望不同对象间的绝对位置能随着改变所画图形的坐标或整体尺寸的改变而自动调整. 然而在某些时候又希望对象间的偏距能保持固定不变. 例如当用户在画一个图形集合时,尽管不同的图形有不同的形式, 但用户又希望某些特征能够保持一致.

Offset[{adx, ady}, position] 允许用户通过给出用原始坐标或尺度坐标定义的绝对偏距来指定对象的位置. 偏距的单位以打印机的点表示, 等于 英寸.

在图形中加上文本, 所用到的字体大小也用打印机的点来表示. 因此, 字体为10-点 其字母的基本高度是打印机的10个点. 可以使用 Offset 使图形中的文字移动, 或者创建与字体大小匹配的画图符号.

使用尺度坐标, 用户可以用显示区域的尺寸来定义图形元素的大小. 然而, 用户不能告诉 Mathematica 某一特定图形元素的实际物理尺寸. 当然, 尺寸最终取决于用户的图形输出设备, 而不能由Mathematica 来决定. 尽管如此, 在 "图形指令和选项" 中所讨论的 AbsoluteThickness 等图形指令能够用于给出某一特定图形元素的"绝对尺寸". 这种方式下定义的尺寸会被大部分、但不是全部输出设备所采用. (例如, 对图形进行光学投影时,不可能也不需要保持其中图形基元的绝对尺寸.)

New to Mathematica? Find your learning path »
Have a question? Ask support »