Skip to main content

graphics - How can I insert an EPS file exported from RegionPlot into MS Word?


I generate a figure using RegionPlot and then Export it as "EPS". When I insert this picture into MS Word, it doesn't work.


The figure is generated by the following code:


Constraint1[α1_, α2_] := Cos[α2] (Sin[α2]/Sin[α1] - Sin[α2] Cot[α1] + Cos[α2]);

CSSSS = Show[

RegionPlot[
0 < α1 < α2 < 60 && Constraint1[α1*π/180, α2*π/180] > 1/2,
{α1, 0, 59.999}, {α2, 0, 60},
BaseStyle -> {FontFamily -> Times, 25}, ImageSize -> 600,
FrameLabel -> {Style["\!\(\*SubscriptBox[\(α\), \(1\)]\)(\[Degree])", 28],
Style["\!\(\*SubscriptBox[\(α\), \(2\)]\)(\[Degree])", 28]},
PlotLabel -> Style["Value Range of Basic Angles", 25, Black],
FrameStyle -> Directive[Thickness[0.003], Black],
Epilog -> {Inset[Style["(45, 60)", 25], {40, 59}],
Inset[Style["(45, 50)", 25], {50, 49}],

Inset[Style["(40, 50)", 25], {35, 49}]}],
ListPlot[{{45, 60}, {45, 50}, {40, 50}}, PlotStyle -> Red]]

Export["xxx.eps", CSSSS]

Screenshot after importing the "xxx.eps" file into MS Word:



screenshot




Answer




The figure you are trying to Export into EPS format contains semi-transparent objects unsupported by this format:


Cases[CSSSS, _Opacity, Infinity]


{Opacity[0.3]}

Actually all the filling produced by RegionPlot is semi-transparent as you can easily find using my shortInputForm function:


CSSSS // shortInputForm

Since transparency actually isn't necessary for your image you can simply replace default semi-transparent filling with non-transparent color (which exactly reproduces the default styling) by adding the following option to RegionPlot:



PlotStyle -> RGBColor[0.8105251`, 0.8520337`, 0.9129394`]

Now


Cases[CSSSS, _Opacity, Infinity]


{Opacity[1]}

while the plot looks exactly as it was looking originally.


In the general case when you have semi-transparent objects overlapping with some non-uniform background you have to perform transparency flattening, see this answer for details.



However even after removing transparency MS Word still cannot import the EPS file Exported from Mathematica 10.2 (which I currently work with, but the same is true for version 8.0.4). The most probable reason is that this EPS file contains PostScript Level 3 instructions which MS Office EPS Import Filter cannot understand. In this answer I discuss limitations of the latter and known methods allowing to generate EPS files compatible with MS Office. The most reliable way is to Export as PDF from Mathematica, then use free utility pdftops or pdftocairo from Poppler utilities for Windows for generating Level 2 EPS file as follows:


pdftops -level2 -eps input.pdf
pdftocairo -level2 -eps input.pdf

Following the pdftocairo route I obtain EPS file which MS Word 2003 successfully imports producing the following visual appearance in Word:


screenshot


As you can see, the Greek letters α are not displayed and instead of Times it displays all text as Arial. But what you see is not the actual imported figure: it is just a preview automatically generated by MS Office EPS Import filter which is known to be inaccurate. For the purposes of printing to PostScript printers this preview isn't used by Word: it sends original PostScript code to the PostScript printers (this code is embedded into Word document when you import a EPS file but cannot be displayed because Word cannot render PostScript). The preview is used only for display purposes and for printing to non-PostScript printers. Let us try to print this Word document to the "Adobe PDF" virtual printer and check how generated PDF file looks in Adobe Acrobat:


screenshot


The figure looks perfectly and the glyph α is correctly embedded!





If you are not satisfied with the above result you have to go through the Adobe Illustrator route described in the linked answer: import the PDF file Exported from Mathematica into Illustrator, edit it in order to fix incorrectly imported text, then export as EPS with unchecked option "Include CMYK PostScript in RGB Files". From my experience, EPS files exported from Illustrator this way are always previewed correctly in MS Word.


Comments

Popular posts from this blog

plotting - Filling between two spheres in SphericalPlot3D

Manipulate[ SphericalPlot3D[{1, 2 - n}, {θ, 0, Pi}, {ϕ, 0, 1.5 Pi}, Mesh -> None, PlotPoints -> 15, PlotRange -> {-2.2, 2.2}], {n, 0, 1}] I cant' seem to be able to make a filling between two spheres. I've already tried the obvious Filling -> {1 -> {2}} but Mathematica doesn't seem to like that option. Is there any easy way around this or ... Answer There is no built-in filling in SphericalPlot3D . One option is to use ParametricPlot3D to draw the surfaces between the two shells: Manipulate[ Show[SphericalPlot3D[{1, 2 - n}, {θ, 0, Pi}, {ϕ, 0, 1.5 Pi}, PlotPoints -> 15, PlotRange -> {-2.2, 2.2}], ParametricPlot3D[{ r {Sin[t] Cos[1.5 Pi], Sin[t] Sin[1.5 Pi], Cos[t]}, r {Sin[t] Cos[0 Pi], Sin[t] Sin[0 Pi], Cos[t]}}, {r, 1, 2 - n}, {t, 0, Pi}, PlotStyle -> Yellow, Mesh -> {2, 15}]], {n, 0, 1}]

plotting - Plot 4D data with color as 4th dimension

I have a list of 4D data (x position, y position, amplitude, wavelength). I want to plot x, y, and amplitude on a 3D plot and have the color of the points correspond to the wavelength. I have seen many examples using functions to define color but my wavelength cannot be expressed by an analytic function. Is there a simple way to do this? Answer Here a another possible way to visualize 4D data: data = Flatten[Table[{x, y, x^2 + y^2, Sin[x - y]}, {x, -Pi, Pi,Pi/10}, {y,-Pi,Pi, Pi/10}], 1]; You can use the function Point along with VertexColors . Now the points are places using the first three elements and the color is determined by the fourth. In this case I used Hue, but you can use whatever you prefer. Graphics3D[ Point[data[[All, 1 ;; 3]], VertexColors -> Hue /@ data[[All, 4]]], Axes -> True, BoxRatios -> {1, 1, 1/GoldenRatio}]

plotting - Mathematica: 3D plot based on combined 2D graphs

I have several sigmoidal fits to 3 different datasets, with mean fit predictions plus the 95% confidence limits (not symmetrical around the mean) and the actual data. I would now like to show these different 2D plots projected in 3D as in but then using proper perspective. In the link here they give some solutions to combine the plots using isometric perspective, but I would like to use proper 3 point perspective. Any thoughts? Also any way to show the mean points per time point for each series plus or minus the standard error on the mean would be cool too, either using points+vertical bars, or using spheres plus tubes. Below are some test data and the fit function I am using. Note that I am working on a logit(proportion) scale and that the final vertical scale is Log10(percentage). (* some test data *) data = Table[Null, {i, 4}]; data[[1]] = {{1, -5.8}, {2, -5.4}, {3, -0.8}, {4, -0.2}, {5, 4.6}, {1, -6.4}, {2, -5.6}, {3, -0.7}, {4, 0.04}, {5, 1.0}, {1, -6.8}, {2, -4.7}, {3, -1.