Skip to main content

plotting - Generating high quality charts in Mathematica for use in LaTeX and Word


I frequently have a probelem using my charts in reports because the text (axes labels and tick marks) look low resolution (fuzzy). When I export my charts, i export them as PNG files. Unless I'm mistaken, this is the correct file format for vector graphics.


In Mathematica, the charts look great at any size, but when I export and drag them into Word, they don't look nearly as nice any more.


Does any one have any tricks they use to use the Mathematica charts in applications like Word?



Answer



You don't say whether you want high quality for printing or for viewing on screen. Unfortunately, in Word, you often have to pick one or the other. Which is not always an easy decision, for example if you're emailing a report to someone and you don't know if they will read it on screen or print it out.


In my experience the best approach for good quality printing from Word is to use a bitmap (raster format), but make sure you export at high resolution. The main advantage is that what you see in Mathematica is what you get on paper. You can use opacity, dashing, fancy typesetting and it will all work. Disadvantages are large file size and the fact that Word does a truly appalling job of resampling the image for display - you will see a very fuzzy image on screen.


For a good compromise between print and screen quality, I use a metafile (vector format). The advantage is that the quality is the same at any size, and generally acceptable for both on screen viewing and printing. The disadvantage is that there are usually slight differences between what you see in Mathematica and what you get in Word. For example text sizes, tick marks and dashing spacing might all change. Also opacity tends not to print very well. You also need to be careful not to create a metafile containing text in Mathematica fonts which the recipient of the report may not have. This can be avoided with a well known trick to convert text to curves by converting to PDF and back.


I use these two buttons to copy graphics for Word, either as bitmap or metafile:



Row@{Button["Metafile",
With[{sd = Options[ButtonNotebook[], StyleDefinitions]},
SetOptions[ButtonNotebook[],
Options[InputNotebook[], StyleDefinitions]];
CopyToClipboard[First@ImportString[
ExportString[ToExpression@NotebookRead@InputNotebook[], "PDF"],
"TextOutlines" -> True]~Magnify~2];
SetOptions[ButtonNotebook[], sd]]],
Button["Bitmap",
With[{sd = Options[ButtonNotebook[], StyleDefinitions]},

SetOptions[ButtonNotebook[],
Options[InputNotebook[], StyleDefinitions]];
CopyToClipboard[ImportString[
ExportString[ToExpression@NotebookRead@InputNotebook[], "PNG",
ImageResolution -> 300]]];
SetOptions[ButtonNotebook[], sd]]]}

enter image description here


To create a palette containing these buttons, evaluate the code to display the buttons then select them and use "Generate Palette from Selection" on the Palettes menu.


Comments

Popular posts from this blog

mathematical optimization - Minimizing using indices, error: Part::pkspec1: The expression cannot be used as a part specification

I want to use Minimize where the variables to minimize are indices pointing into an array. Here a MWE that hopefully shows what my problem is. vars = u@# & /@ Range[3]; cons = Flatten@ { Table[(u[j] != #) & /@ vars[[j + 1 ;; -1]], {j, 1, 3 - 1}], 1 vec1 = {1, 2, 3}; vec2 = {1, 2, 3}; Minimize[{Total@((vec1[[#]] - vec2[[u[#]]])^2 & /@ Range[1, 3]), cons}, vars, Integers] The error I get: Part::pkspec1: The expression u[1] cannot be used as a part specification. >> Answer Ok, it seems that one can get around Mathematica trying to evaluate vec2[[u[1]]] too early by using the function Indexed[vec2,u[1]] . The working MWE would then look like the following: vars = u@# & /@ Range[3]; cons = Flatten@{ Table[(u[j] != #) & /@ vars[[j + 1 ;; -1]], {j, 1, 3 - 1}], 1 vec1 = {1, 2, 3}; vec2 = {1, 2, 3}; NMinimize[ {Total@((vec1[[#]] - Indexed[vec2, u[#]])^2 & /@ R...

functions - Get leading series expansion term?

Given a function f[x] , I would like to have a function leadingSeries that returns just the leading term in the series around x=0 . For example: leadingSeries[(1/x + 2)/(4 + 1/x^2 + x)] x and leadingSeries[(1/x + 2 + (1 - 1/x^3)/4)/(4 + x)] -(1/(16 x^3)) Is there such a function in Mathematica? Or maybe one can implement it efficiently? EDIT I finally went with the following implementation, based on Carl Woll 's answer: lds[ex_,x_]:=( (ex/.x->(x+O[x]^2))/.SeriesData[U_,Z_,L_List,Mi_,Ma_,De_]:>SeriesData[U,Z,{L[[1]]},Mi,Mi+1,De]//Quiet//Normal) The advantage is, that this one also properly works with functions whose leading term is a constant: lds[Exp[x],x] 1 Answer Update 1 Updated to eliminate SeriesData and to not return additional terms Perhaps you could use: leadingSeries[expr_, x_] := Normal[expr /. x->(x+O[x]^2) /. a_List :> Take[a, 1]] Then for your examples: leadingSeries[(1/x + 2)/(4 + 1/x^2 + x), x] leadingSeries[Exp[x], x] leadingSeries[(1/x + 2 + (1 - 1/x...

What is and isn't a valid variable specification for Manipulate?

I have an expression whose terms have arguments (representing subscripts), like this: myExpr = A[0] + V[1,T] I would like to put it inside a Manipulate to see its value as I move around the parameters. (The goal is eventually to plot it wrt one of the variables inside.) However, Mathematica complains when I set V[1,T] as a manipulated variable: Manipulate[Evaluate[myExpr], {A[0], 0, 1}, {V[1, T], 0, 1}] (*Manipulate::vsform: Manipulate argument {V[1,T],0,1} does not have the correct form for a variable specification. >> *) As a workaround, if I get rid of the symbol T inside the argument, it works fine: Manipulate[ Evaluate[myExpr /. T -> 15], {A[0], 0, 1}, {V[1, 15], 0, 1}] Why this behavior? Can anyone point me to the documentation that says what counts as a valid variable? And is there a way to get Manpiulate to accept an expression with a symbolic argument as a variable? Investigations I've done so far: I tried using variableQ from this answer , but it says V[1...