Take the 2-minute tour ×
Mathematica Stack Exchange is a question and answer site for users of Mathematica. It's 100% free, no registration required.

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.:

enter image description here

But the problem came out when the figure was expoted to EPS e.g., enter image description here

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.

share|improve this question
1  
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 at 8:17
    
Try using Dashing or AbsoluteDashing and playing with the dash lengths. –  george2079 Mar 23 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 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 at 2:50
    
@george2079 Thank you for your help! AbsoluteDashing is very usefull. –  Qu8k Mar 24 at 2:56
show 1 more comment

1 Answer 1

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"];

enter image description here

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)

enter image description here

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:

enter image description here

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}]}}

enter image description here

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.

share|improve this answer
    
+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 at 16:48
1  
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 at 17:56
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.