# Exporting EPS figures with dashing from ListPlot

I am having difficulties exporting EPS figures. If I use the LineLegend option to create a dashed or a dot-dashed line, it seems ok in Mathematica 9.0 e.g.:

But the problem came out when the figure was expoted to EPS e.g.,

I use the following Mathematica code

G1 = ListPlot[{
Table[{(i - 1) h, ρf[u, (i - 1) h, RKuOm, FB][[4, 4]]}, {i, 1, n - 1}],
Table[{(i - 1) h, ρf[u, (i - 1) h, RKuOm, FB][[3, 3]]}, {i, 1, n - 1}],
Table[{(i - 1) h, ρf[u, (i - 1) h, RKuOm, FB][[2, 2]]}, {i, 1, n - 1}]
},
PlotRange -> All, MaxPlotPoints -> Infinity, Joined -> True,
PlotLegends -> Placed[LineLegend[{Directive[Purple, Thickness[0.14]],
Directive[Blue, Thickness[0.14], Dashed], Directive[Red, Thickness[0.14],
DotDashed]}, {Style["\!$$\*SubscriptBox[\(ρ$$, $$44$$]\)", 22, Bold],
Style["\!$$\*SubscriptBox[\(ρ$$, $$33$$]\)", 22, Bold],
Style["\!$$\*SubscriptBox[\(ρ$$, $$22$$]\)", 22, Bold]},
LegendMarkerSize -> {{35, 8}}], {{0.82, 0.4}}], AspectRatio -> 0.8,
PlotStyle -> {{Purple, Thickness[0.012]}, {Blue, Thickness[0.014],
Dashed}, {Red, Thickness[0.013], DotDashed}},  Frame -> True,
FrameStyle -> Directive[Thick, 15],
FrameLabel -> {Style["\!$$\*SubscriptBox[\(ω$$, $$1$$]\)t", 18], None},
Epilog -> {Inset[Style["(a)", 24, FontFamily -> "Times", Bold], {6, 0.95}],
Inset[Style["G=0.1", 24, FontFamily -> "Times", Bold], {41.5, 0.61}]}]

Export["D:\\fermion.eps",G1,"EPS"];


So, my question: why the style of the lines change? And how to solve?

Many thanks in advance.

-
Welcome to SE. Please post a minimal working example, ideally just containing some simple plot generation that exhibits the problem for you, so readers can reproduce. As it stands, your code is useless without the data/function definitions it needs. Please clarify where you see the problem, i.e., if you Import to Mathematica, is the problem there, or is it with some external viewer? –  rasher Mar 23 '14 at 8:17
Try using Dashing or AbsoluteDashing and playing with the dash lengths. –  george2079 Mar 23 '14 at 16:18
With posted code I'm getting the expected error: Table::iterb : Iterator {i, 1, -1 + n} does not have appropriate bounds. What is n? –  murray Mar 23 '14 at 21:31
@rasher Thank you, I am sorry for the error code. I think I could solve the problem by using AbsoluteDashing which is exactly the answer given by george2079. In addition, if the thickness of the lines are changed e.g.,Thickness[a] (a<0.01), I fond that I can use the posted code to export a normal EPS image, at least the dashed or the dotdashed lines would not turn into a straight line. –  Qu8k Mar 24 '14 at 2:50
@george2079 Thank you for your help! AbsoluteDashing is very usefull. –  Qu8k Mar 24 '14 at 2:56

Here is a more simple example showing the same effect:

 G1 = ListPlot[
Table[{i , Sin[i j Pi/50]}, {j, 3}, {i, 50}], PlotRange -> All,
Joined -> True, AspectRatio -> 0.8,
PlotStyle -> {{Purple, Thickness[0.012]}, {Blue, Thickness[0.014],
Dashed}, {Red, Thickness[0.013], DotDashed}}]
Export["test1.eps", G1, "EPS"];


The problem turns out to be that postscript is putting linecaps on all the little segments that are proportional to the line thickness. If you look close you see the lines are "dashed" but the segments run together. (Screendump from Acrobat conversion of the eps)

The fix is to specify CapForm[] :

 G2 = ListPlot[
Table[{i , Sin[i j Pi/50]}, {j, 3}, {i, 50}], PlotRange -> All,
Joined -> True, AspectRatio -> 0.8,
PlotStyle -> {{Purple, Thickness[0.012]}, {Blue, Thickness[0.014],
CapForm["Butt"], Dashed}, {Red, Thickness[0.013], DotDashed}}]
Export["test3.eps", G2, "EPS"];


Oddly CapForm["None"] doesn't work.

Acrobat conversion of the eps:

Note the effect carried over to the second dashed line even though I only put it on the first.

Incedentally knowing this we can get (IMO) nicer dashing in eps with round linecaps and with explicit dashing specified:

  PlotStyle -> {{Purple, Thickness[0.012]}, {Blue, Thickness[0.014],
CapForm["Round"], Dashing[{0.014 2, 0.014 2}]}, {Red,
Thickness[0.013], Dashing[{1*^-10, 0.014 2, 0.014 2, 0.014 2}]}}


note the "really small" 10*^-10` dash length gives a perfect circle in the eps plot. ( 0 does not work as well ). Be aware the round caps are not supported by many (most?) export formats however.

-
+1. I really appreciate your answer! I thought that Mathematica's EPS export is desperate and (actually) unsupported but now I see that it is bad but not desperate! –  Alexey Popkov Mar 24 '14 at 16:48
I've always liked it - it is the best vector graphics format in terms of publication quality (Except for lack of transparancy support), and other than a few quirks it is well supported by mathematica. This particular issue shows up because ps has this powerful linecap capability that no other vector format supports, so whoever wrote the Dashing defaults didn't take it into account. –  george2079 Mar 24 '14 at 17:56