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 trying out Mathematica 10 on https://programming.wolframcloud.com. $PlotTheme interested me a lot because it finally produces nice plots (probably) without the need of fine tuning of every plot. However, the options are conflicting each other and there seems to be some hiding options. For example (figures available at https://www.wolframcloud.com/objects/0caeabc9-81ba-4c6c-a51d-64f06c644a40),

(* This get thick lines *)
LogPlot[{1/x, x,2x, E^x},{x,1,10},PlotTheme->{"ThickLines"}]

(* This get monochrome *)
LogPlot[{1/x, x,2x, E^x},{x,1,10},PlotTheme->{"Monochrome"}]

(* There is no monochrome or thick lines here *)
LogPlot[{1/x, x,2x, E^x},{x,1,10},PlotTheme->{"Monochrome","ThickLines"}]

As another example,

(* Didn't get open markers or monochrome, but at least get thick *)
ListPlot[{{{1,2},{2,4},{3,7},{4,9}},{{1,3},{2,4}}},PlotTheme->{"Monochrome","OpenMarkersThick"}]

(* After adding frame, markers completely changed *)
ListPlot[{{{1,2},{2,4},{3,7},{4,9}},{{1,3},{2,4}}},PlotTheme->{"Monochrome","Frame","OpenMarkersThick"}]

Is it possible to make those themes non-conflicting with each other? The theme seems perfect for me is as follows:

(1) The lines are solid, dashed, dotted, ... ("Monochrome")

(2) The lines are colored. (e.g. "VibrantColor")

(3) Framed ("Frame").

(4) Larger labels ("LargeLabels"). At best thicker lines ("ThickLines").

(5) Setting apply both to Plot and ListPlot (to put in $PlotTheme instead of tuning every plot).

But I am not able to get all of them satisfied -- once Plot looks fine, ListPlot looks ugly. Is it possible to get some non-conflicting fine tunings once and apply everywhere?

share|improve this question
8  
I would certainly report your difficulties to support@wolfram.com –  chuy Jun 30 at 15:46
2  
This could be a bug, as help says it is supposed to combine them. –  Nasser Jun 30 at 15:49
1  
It is a bug in my opinion. It appears partly dependent on order, but that is not consistent. For example {"Frame","Monochrome"} works correctly but {"ThickLines","Monochrome"} does not affect line thickness and {"Monochrome","Frame"} yields neither feature. –  mfvonh Jun 30 at 16:10
    
Thanks a lot for the comments! I added bugs tag to the post. –  Yi Wang Jun 30 at 18:09
    
This appears to have been improved somewhat in 10.0.1; the first example appears to work. However the other examples are still broken. –  Mr.Wizard Sep 17 at 16:18

1 Answer 1

up vote 11 down vote accepted

The details of the styles associated with various themes can be accessed using the function ResolvePlotThemes in the Charting context.

For example:

Grid[{#, Column@(Charting`ResolvePlotTheme[#, ListPlot] /. 
   HoldPattern[PlotMarkers -> _] :>  Sequence[])} & /@ {"Monochrome", "Frame", "Vibrant"}, 
   Dividers -> All]  (* removed the part related to PlotMarkers to save space *)

enter image description here

Similarly, for the themes "ThickLines" and "OpenMarkersThick"

 Grid[{#, Column@(Charting`ResolvePlotTheme[#, ListPlot] /. 
      HoldPattern[PlotMarkers -> _] :> Sequence[])} & /@ 
                     {"ThickLines", "OpenMarkersThick"}, 
       Dividers -> All]

enter image description here

So ...

(1) Depending on the order in which the themes appear on the RHS of PlotTheme->_ the conflicts are resolved in favor of earlier (or later ?) ones, that is, later (earlier ?) appearances of a given option are simply ignored.

(2) However, you can mix/match the relevant styling pieces from various themes. For example:

pltstylm = "DefaultPlotStyle" /. 
        (Method /. Charting`ResolvePlotTheme["Monochrome", ListLinePlot]);
pltstylv = "DefaultPlotStyle" /. 
         (Method /.  Charting`ResolvePlotTheme["Vibrant", ListLinePlot]);
pmrkrs = PlotMarkers /. Charting`ResolvePlotTheme["OpenMarkersThick", ListLinePlot];
frm = Frame /. Charting`ResolvePlotTheme["Frame", ListLinePlot];
frmstyl =  FrameStyle /. Charting`ResolvePlotTheme["Frame", ListLinePlot];
grdlnsstyl =  GridLinesStyle /.  Charting`ResolvePlotTheme["Monochrome", ListLinePlot];

ListPlot[{{{1, 2}, {2, 4}, {3, 7}, {4, 9}}, {{1, 3}, {2, 4}}},
    PlotStyle->pltstylv, PlotMarkers->pmrkrs,Frame->frm,Joined->True,
    FrameStyle->frmstyl,GridLines->Automatic,
    GridLinesStyle->grdlnsstyl, ImageSize ->700]

enter image description here

ListPlot[{{{1, 2}, {2, 4}, {3, 7}, {4, 9}}, {{1, 3}, {2, 4}}},
    PlotStyle->pltstylm, PlotMarkers->pmrkrs,Frame->frm,Joined->True,
    FrameStyle->frmstyl, GridLines->Automatic,GridLinesStyle->grdlnsstyl,
    ImageSize ->700]

enter image description here

 dashedVbrnt = Join[pltstylm,Rest@pltstylm];
 dashedVbrnt[[All, 1]] = pltstylv[[All, 1]];  
 Plot[Evaluate@Table[BesselJ[n, x], {n, 5}], {x, 0, 10}, ImageSize ->400, 
    PlotStyle -> dashedVbrnt, PlotTheme -> "Detailed"] 

enter image description here

ListPlot[Table[BesselJ[n, x], {n, 5}, {x, 0, 10,.3}], Filling->Axis,
   ImageSize ->500, PlotStyle ->dashedVbrnt, PlotMarkers->pmrkrs, Joined->True,
   PlotTheme ->"Detailed"]

enter image description here

share|improve this answer

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.