这很可能是Mathematica 8.0.1中的一个错误,也可能是其他版本.让我们尝试以下方法:
Table[
Export[
"Res_" <> ToString[r] <> ".png", Rasterize[
Style[x^2 + y^2, 40],
Background -> None,
ImageResolution -> r
],
Background -> None],
{r, {20, 40, 100, 300, 400, 500, 600}}
]
Run Code Online (Sandbox Code Playgroud)
这是我获得的屏幕截图:

首先要注意的是,最后两张图片的尺寸错误.这在某种程度上是好的,因为我对300或以上的分辨率感到满意.现在看看这个:
in = 72;
G3D = Graphics3D[AspectRatio -> 0.925, Axes -> {True, True, True},
AxesEdge -> {{-1, -1}, {1, -1}, {-1, -1}}, AxesStyle -> Directive[10, Black],
BaseStyle -> {FontFamily -> "Arial", FontSize -> 12}, Boxed -> False,
BoxRatios -> {1, 1, 1}, LabelStyle -> Directive[Black],
ImagePadding …Run Code Online (Sandbox Code Playgroud) 我最近了解到,Export在数学默认使用的"Printout"画面风格的环境,而不是"Working"导出为PDF时.它有时会导致FontSize生成的PDF中的波动非常烦人.
试试例子:
Show[First@ImportString[ExportString[Style[T, 100], "PDF"], "PDF"],
Prolog -> Inset[Style[T, 100], FormatType -> StandardForm]]
Show[First@ImportString[ExportString[Style[T, 100], "PDF"], "PDF"],
Prolog ->
Inset[Style[T, 100, Magnification -> .8],
FormatType -> StandardForm]]
Run Code Online (Sandbox Code Playgroud)

您可以看到导出的"T"具有笔记本中出现的"T"大小的80%.这是"Printout"默认情况下调整环境的方式.
有没有办法强制Export使用默认"Working"环境?
PS由于某些原因,Magnification->1为"打印输出"环境设置私有样式表不会影响Export.
将相当复杂的图(特别是ListDensityPlot)导出为PDF或EPS(例如,用于发布)时,生成的文件大小可能非常大.例如:
data = Flatten[Table[{f0, f, Exp[-(f - f0)^2/25^2]}, {f0, 500, 700, 5}, {f, 300,
900}], 1];
plot=ListDensityPlot[data,PlotRange->{Automatic,Automatic,{0,1}},InterpolationOrder->0]
Run Code Online (Sandbox Code Playgroud)

此示例数据集的大小与我通常使用的大小相同.当我使用导出时Export["C:\\test.pdf", plot],它生成一个23.9MB的PDF文件.如果我反而尝试Export["C:\\test1.pdf", Rasterize[plot]]它会小得多,但图像的完整性和可重复性自然会受到影响.
如果我的实际数字是一个组合图,例如(编辑:f转到900),这将进一步复杂化
plot2 = Show[plot, Plot[x, {x, 500, 900}, PlotStyle -> Thick]]
Run Code Online (Sandbox Code Playgroud)

(或使用某些用法Epilog)我喜欢将背景ListDensityPlot光栅化,但保留其他标记并以"矢量"形式绘制.或者至少,帧标签是非光栅化的.
有没有办法做到这一点?
或者,通过其他一些聪明的方法来实现相同的目标?
我已经检查了相关的问题,但这需要比它需要的更复杂(主要是导出然后导入).我已经能够利用该问题中的一些技巧来分别从轴中提取图:
axes = Graphics[{}, Options[plot2]]
Run Code Online (Sandbox Code Playgroud)

plots = Graphics[plot2[[1]]]
Run Code Online (Sandbox Code Playgroud)

但是,在plots长期失去AspectRatio和PlotRange等plots可以用被击中Rasterize,但它需要的尺寸固定.
然后,如何将它们组合在一起?
Mathematica是否支持线框图像的隐藏线移除?如果情况并非如此,那么有没有人遇到过这样的方法呢?让我们从这开始:
Plot3D[Sin[x+y^2], {x, -3, 3}, {y, -2, 2}, Boxed -> False]
Run Code Online (Sandbox Code Playgroud)

要创建线框,我们可以:
Plot3D[Sin[x+y^2], {x, -3, 3}, {y, -2, 2}, Boxed -> False, PlotStyle -> None]
Run Code Online (Sandbox Code Playgroud)

我们可以做的一件事就是将所有表面着色为白色.然而,这是不希望的.原因是因为如果我们将这个隐藏的线框架模型导出为pdf,我们将拥有Mathematica用于渲染图像的所有白色多边形.我希望能够以pdf和/或eps格式获得隐藏线移除的线框.
我已经发布了这个问题的解决方案.问题是代码运行速度很慢.在当前状态下,它无法在此问题中为图像生成线框.随意玩我的代码.我在帖子的末尾添加了一个链接.您也可以在此链接中找到代码
如何在mathematica中将文本放置在绘图之外?快速谷歌搜索将引导您
http://reference.wolfram.com/mathematica/howto/AddTextOutsideThePlotArea.html
这是不够的,因为你想用代码实现这一点.在mathematica中放置文本的一个简单示例如下:
Show[
Plot[x^3, {x, -1, 1},
Frame -> True,
ImageSize -> Medium,
FrameLabel -> {"x", "y"},
PlotRange -> {{-1, 1}, {-1, 1}}
],
Graphics[
Text[Style["A", Bold, 14, Red], {.5, .5}]]
]
Run Code Online (Sandbox Code Playgroud)
这将字母A放置在相对于图的点(.5,.5)处.有没有办法相对于图像的大小放置文本?据我所知,一切都在情节坐标中完成.治标不治本我是设置选项PlotRangeClipping来False并给予正确的坐标设置文本.
Show[
Plot[
x^3, {x, -1, 1},
Frame -> True,
ImageSize -> Medium,
FrameLabel -> {"x", "y"},
PlotRange -> {{-1, 1}, {-1, 1}}
],
Graphics[
Text[
Style["A", Bold, 14, Red],
{-1.2, 1}
]
],
PlotRangeClipping -> False
]
Run Code Online (Sandbox Code Playgroud)

这种方法的一个缺点是,如果我们改变绘图的范围,那么我们需要重新计算文本的坐标,以便将其保持在我们想要的位置(相对于整个图像).
尝试将TextA放在情节之外. …
如何优化Mathematica生成的eps或pdf文件的大小?
通常文件大小应该比它大50-100倍(下面的例子).对于某些应用程序(例如将图形放在出版物中,或者甚至更多 - 将其放在大型海报上)我需要在矢量图形中使用轴,因此对于我来说使用光栅图形并不是最佳选择.
每个实用的解决方案(无论是在Mathematica中设置正确的选项,还是在其他应用程序中进行进一步的转换)都将受到赞赏.
例如,下面的代码生成一个eps数字:
plot = ListDensityPlot[
Table[Random[], {100}, {100}],
InterpolationOrder -> 0]
Export["testplot.eps", plot]
Export["testplot.pdf", plot]
Run Code Online (Sandbox Code Playgroud)
生成一个大小为3.3MB且pdf大小为5MB的eps文件(如果它有所不同,则在Mac OS X 10.6上的Mathematica 7上).
为了进行比较,具有相同轴的3x3图具有8kB(pdf)至20kB(eps).bmp中100x100点为30kB(png略低).
对于其他类型的情节,问题是相同的,重点是ListPlot3D.