组装多个Graphics对象

时间:2011-04-18 20:40:40

标签: wolfram-mathematica

考虑以下简单示例:

f[x_] = Sin[5 x] + Sin[3 x];
p1 = PolarPlot[f[x], {x, 0, 2 Pi}, ImageSize -> 50 {5, 2.5}, 
  Frame -> True]
p2 = PolarPlot[f'[x], {x, 0, 2 Pi}, ImageSize -> 50 {5, 3}, 
  Frame -> True]

产生以下两个数字

enter image description here enter image description here

现在我想将它们中的两个对齐,一个在另一个上面,没有任何额外的间隙。执行FullGraphics@GraphicsColumn[{p1, p2}, Frame -> All],返回一个在较短的图形周围有额外空白区域的对象(我已经在所有对象中打开了框架来说明这一点) enter image description here

我找不到强制每个列“单元格”垂直适合图像大小的方法(注意:我知道在我的例子中,第二个图中有额外的水平空格,这是故意的。我只是试图紧贴它。我尝试使用Spacings选项,但这仍然不能令人满意。所以,我的第一个问题是:“有没有办法可以使用GraphicsGridGraphicsColumn或通过任何其他方式执行此操作?”

另一种方法是像这样使用ImageAssemble

ImageAssemble[Map[FullGraphics, {{p1}, {p2}}, {2}]]

我做了我想要的,但是给出了一个栅格化的图像(以下是一个屏幕抓取,因为保存的文件的分辨率要差很多)。

enter image description here

我的实际数字是整洁的矢量图,我甚至不想考虑光栅化它们,无论分辨率有多高。所以,我的第二个问题是:“有没有办法从ImageAssemble获得矢量图形输出?”如果有帮助,我正在使用Mma7并将我的图片保存为Export["filename.pdf",expr]

我知道可以使用LevelScheme来显示示例。但是,并非所有绘图功能都与LevelScheme兼容,并且不适用于所有情况。

3 个答案:

答案 0 :(得分:4)

结果必须是图形吗?如果没有,您可以使用常规列:

Column[{p1, p2}, Spacings -> 0]

enter image description here

答案 1 :(得分:2)

根据Brett的回答,这可能是你想要的:

FullGraphics@GraphicsGrid[{{p1}, {p2}}, Spacings -> 0]

答案 2 :(得分:0)

方法1:

  • 使用ImageAssemble[{image1},{image2}....]
  • 可以使用ImagePad在每张图片周围添加一些空间:

    ImageAssemble[ {ImagePad[image1,m1]}, {ImagePad[image2,m2]},...]
    
  • 注意 - 所有图片的大小必须相同(使用ImageDimensions,并选择m1m2 ......)。

方法2:

  • 定义维度行x cols的图像数组,例如“myphotos”

    ImageAssemble[myphotos]