6
$\begingroup$

Some stylistic attributes of plots are independent of colour, e.g. thickness, dashing, etc.

I can make the lines thick in this plot without having to specify a separate style for each line:

Plot[Table[BesselJ[n, x], {n, 4}] // Evaluate, {x, 0, 10}, 
 PlotStyle -> Thickness[0.01]]

enter image description here

I can also easily change the colour scheme:

Plot[Table[BesselJ[n, x], {n, 4}] // Evaluate, {x, 0, 10}, 
 PlotStyle -> 98]

enter image description here

How can I change both the colour scheme and the line thickness (or dashing) at the same time, without having to specify a separate style for each plotted function?

The following works, but it is cumbersome and requires hard-coding the number of plotted functions (or putting in an arbitrary large number):

Plot[Table[BesselJ[n, x], {n, 4}] // Evaluate, {x, 0, 10}, 
 PlotStyle -> (Directive[ColorData[98][#], Thickness[0.01]] & /@ Range[4])]

enter image description here

I know that I can do PlotStyle -> 98, PlotTheme -> "ThickLines", but that requires me to use a single pre-defined line thickness (or to choose from only a few). It does not allow me to set my own custom base plotting style with an arbitrary thickness and dashing specification.

$\endgroup$
8
$\begingroup$

You can use the (undocumented) Method suboption "DefaultPlotStyle" as a second place to specify plot styles:

Plot[Table[BesselJ[n, x], {n, 4}] // Evaluate, {x, 0, 10},
 PlotStyle -> 98,
 Method -> "DefaultPlotStyle" -> Thick
 ]

enter image description here

More generally, you could specify a list of directives in PlotStyle, and a common default in "DefaultPlotStyle":

Plot[Table[BesselJ[n, x], {n, 4}] // Evaluate, {x, 0, 10},
 PlotStyle -> {Directive[Red, Dashed], Green, Blue, 
   Directive[Orange, DotDashed]}, 
 Method -> "DefaultPlotStyle" -> Thick,
 BaseStyle -> Dotted
 ]

enter image description here

Note however that this can interfere with PlotTheme, since themes use the same option to set common default styles. In case more control is needed, you could probably register a custom plot theme that sets the "DefaultColor", "DefaultThickness", etc. suboptions before they are merged into "DefaultPlotStyle" by Charting`ResolvePlotTheme.

$\endgroup$
  • $\begingroup$ What does the 98 in PlotStyle -> 98 mean? Are such numeric values for PlotStyle documented somewhere? $\endgroup$ – murray Feb 14 at 15:14
  • 1
    $\begingroup$ @murray The 98 refers to the indexed colour schemes. ColorData[98] should provide the same result. You can see the numbers for the colour schemes if you go into the "Palettes" menu > "Color Schemes". If you look at the "Indexed" palette, there are numbers associated with each one. $\endgroup$ – MassDefect Feb 14 at 16:45

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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