Forgive me, but I cannot for the life of me figure out how to do this no matter how much I research. I really want to change the default font for all graphics, such as ArrayPlot, ContourPlot, DiscretePlot3D, etc. as well as the fonts used in any legends / axes / labels / (everything) to Times New Roman (I'm in Mathematica 10 so everything is sans serif by default). I know that I can set all of these manually usually by using something like Directive[FontFamily -> "Times New Roman"]
, but it's killing me to do this for every single graph. I've tried to use stylesheets to do this but I cannot figure out how to get them working. I'm sorry that this is so basic, but if you could just provide a simple, step-by-step solution to achieve this, I would be eternally grateful. Thank you very much.
2 Answers
You can control the fonts that are used through a stylesheet. First, note the style definition used by the DefaultBaseStyle
GraphicsBox
option:
Options[GraphicsBox, DefaultBaseStyle]
{DefaultBaseStyle -> "Graphics"}
This means that the following options are used unless overridden:
CurrentValue[{StyleDefinitions, "Graphics"}]
{CellMargins -> {{4, Inherited}, {Inherited, Inherited}}, CellGroupingRules -> "GraphicsGrouping", StripStyleOnPaste -> False, PageBreakWithin -> False, GeneratedCell -> True, CellAutoOverwrite -> True, ShowCellLabel -> False, DefaultFormatType -> DefaultOutputFormatType, ContextMenu -> {MenuItem["Cu&t Graphics Selection", "Cut"], MenuItem["&Copy Graphics Selection", "Copy"], MenuItem["&Paste into Graphic", FrontEnd`Paste[After]], Delimiter, MenuItem["&Drawing Tools", FrontEndExecute[{FrontEnd`NotebookOpen[ FrontEnd`FindFileOnPath["DrawingTools.nb", "PrivatePathsSystemResources"]]}]], MenuItem["&Get Coordinates", FrontEndExecute[FrontEnd`Select2DTool["GetCoordinates"]]], Delimiter, MenuItem["G&roup", "Group"], MenuItem["&Ungroup", "Ungroup"], Delimiter, MenuItem["Move to &Front", "MoveToFront"], MenuItem["Move to &Back", "MoveToBack"], MenuItem["Move For&ward", "MoveForward"], MenuItem["Move Bac&kward", "MoveBackward"]}, "AutoStyleOptionsHighlightMisspelledWords" -> False, LanguageCategory -> "NaturalLanguage", FormatType -> StandardForm, ShowStringCharacters -> False, NumberMarks -> False, CounterIncrements -> "Graphics", ImageMargins -> {{43, Inherited}, {Inherited, 0}}, Arrowheads -> 0.04, Dashing -> None, CapForm -> "Square", JoinForm -> {"Miter", 3.25}, LineColor -> GrayLevel[0], LineOpacity -> 1, EdgeColor -> GrayLevel[0], EdgeOpacity -> 1, EdgeThickness -> Medium, EdgeDashing -> None, EdgeCapForm -> "Square", EdgeJoinForm -> {"Miter", 3.25}, FrontFaceColor -> GrayLevel[0], BackFaceColor -> GrayLevel[0], FrontFaceOpacity -> 1, BackFaceOpacity -> 1, GraphicsColor -> GrayLevel[0], PointSize -> Absolute[3], Thickness -> Medium, Opacity -> 1, DrawEdges -> False, StyleMenuListing -> None, FontFamily -> "Arial", FontSize -> 10, FontWeight -> "Plain", FontColor -> GrayLevel[0], FontOpacity -> 1}
In particular note the option value for the font family:
CurrentValue[{StyleDefinitions, "Graphics", FontFamily}]
"Arial"
So, to have Mathematica use the font "Times New Roman" you can just change the stylesheet. For instance:
SetOptions[
EvaluationNotebook[],
StyleDefinitions -> Notebook[
{
Cell[StyleData[StyleDefinitions->"Default.nb"]],
Cell[StyleData["Graphics"], FontFamily->"Times New Roman"]
},
StyleDefinitions->"PrivateStylesheetFormatting.nb"
]
]
Let's see this in action:
Plot[Sin[x], {x, 0, Pi}, PlotLabel->"FooBar"]
There may be other GraphicsBox
options that may need adjusting, e.g., DefaultLabelStyle
, which can be handled in the same way.
Addendum
A comment requested support for PDF export as well. PDF export uses the "Printout" style environment, so one needs to add:
Cell[StyleData["Graphics", "Printout"], FontFamily->"Times New Roman"]
to the style sheet as well. Another, perhaps better possibility, is to use All. So, the following should work:
SetOptions[
EvaluationNotebook[],
StyleDefinitions -> Notebook[
{
Cell[StyleData[StyleDefinitions->"Default.nb"]],
Cell[StyleData["Graphics", All], FontFamily->"Times New Roman"]
},
StyleDefinitions->"PrivateStylesheetFormatting.nb"
]
]
-
1$\begingroup$ Yes, I think the hidden point of all similar questions is 'how can I know which options/styles to adjust?'. "Graphics" is one of them, then Label/Axes-style options come in play, not to mention TraditionalForm etc. $\endgroup$– KubaCommented Nov 23, 2017 at 8:49
-
$\begingroup$ One can see richness of the setup by trying to set size and color aswell:
Cell[StyleData["Graphics"], FontFamily -> "Times New Roman", FontSize -> 28, FontColor -> Black]
and use this to compare:{Style["FooBar", "Graphics"], Plot[{Sin[x], Cos[x]}, {x, 0, Pi} , AxesLabel -> {"FooBar", "FooBar"} , PlotLegends -> "Expressions", ImageSize -> 400 , PlotLabel -> "FooBar"] // Labeled[#, "FooBar"] &}
$\endgroup$– KubaCommented Nov 23, 2017 at 8:50 -
$\begingroup$ It seems that when I
Export
a figure like this to PDF, the new font style is not preserved. Is there an easy fix for this? $\endgroup$– SzabolcsCommented Nov 23, 2017 at 16:19 -
$\begingroup$ I mean, I know that if I save the graphics using the context menu (right click -> Save Graphics As...) then the font will be preserved, but that method has other issues, such as imprecise output and lack of automatibility. I very much prefer to use
Export
. $\endgroup$– SzabolcsCommented Nov 23, 2017 at 16:22 -
2$\begingroup$ This no longer works in 12.1.0. Are you aware of a workaround? $\endgroup$– SzabolcsCommented Apr 29, 2020 at 7:21
Try to see if this works for you. (add all the type of plots in the command below you want to set)
SetOptions[{Plot,ListPlot,ArrayPlot,ContourPlot,DiscretePlot3D},
BaseStyle->{14,Directive[FontFamily->"Times New Roman"]}];
For BarLegend
, it does not use BaseStyle
so add this
SetOptions[{BarLegend},LabelStyle->{14,Directive[FontFamily->"Times New Roman"]}];
And now do
Plot[Sin[x],{x,-1,1},PlotLabel->"This is my plot",
AxesLabel->{"this is X","this is Y"}]
etc...
It will have the font family and size indicated in the SetOptions
command for all plots.
-
$\begingroup$ This is close, but it doesn't appear to change the text that appears in certain types of plot legends, such as "BarLegend." How would I account for that as well? $\endgroup$ Commented Nov 23, 2017 at 6:34
-
$\begingroup$ @JohnTravolski I have not tried it with
BarLegend
. This might be affected by the options of the plot used with the legened. It might have different baseStyle. It looks like BarLeged usesLabelStyle
to set the font which does not have aBaseStyle
option. $\endgroup$– NasserCommented Nov 23, 2017 at 6:36 -
$\begingroup$ In newer versions of Mathematica (I'm on 13.0, Mac) the
BaseStyle
option doesn't seem to affect anything. Supplying the directive to the plot function directly works though. Any ideas? $\endgroup$ Commented Oct 13, 2022 at 21:59