# How to show the fraction line as a slash instead of horizontal bar in plot tick labels?

Is there any option to show the fraction numbers in the tick labels of a plot in the format of 2/3 instead of using a horizontal bar as the fraction line?

You could specify a custom label for each tick, programmatically generated using the InputForm of the fraction, which uses the horizontal dash. For instance:

Plot[
x, {x, 0, 3},
Ticks -> {{#, InputForm[#]} & /@ Range[0, 3, 1/3], Automatic}
]


To address your comment regarding the dropped labels, you may be better off using a Frame and FrameLabels instead:

Plot[
x, {x, 0, 3},
Frame -> {{True, False}, {True, False}},
FrameTicks -> {{#, InputForm[#]} & /@ Range[0, 3, 1/3], Automatic}
]


• Thank you. I noticed that Mathematica sometimes omits some tick labels, which is also the case in your plot above. Is there a way of letting it not omit any tick labels if they are given in a list, e.g. the 0 in your list Range[0, 3, 1/3]? – nanjun Jan 27 '17 at 22:21
• @nanjun Yes, but perhaps a frame would be easier to use in that case; see my updated answer. – MarcoB Jan 27 '17 at 22:27
• I wonder what is the criterion that Mathematica drops labels? Using frame is a way around but it shows a little bit more before 0. Is it possible to disable it from dropping labels? – nanjun Jan 27 '17 at 22:31
• @nanjun It drops that $0$ label because, when axes are present, it would be positioned at the axis intersection point, and it would be awkwardly placed. I don't know of a simple way of forcing its placement. Additionally, the amount of padding on each axis (i.e. the amount of "extra space" you were referring to) should be exactly the same whether you are using axes or frames, and is controlled by PlotRangePadding which for Plot is set as 2% by default (i.e. Scaled[0.02]), if I remember correctly. – MarcoB Jan 27 '17 at 22:34

If one is allowed to use a package, here is another possibility. First load MaTeX then

SetOptions[MaTeX, "Preamble" -> {"\\usepackage{nicefrac}"}];
makeFrac[n_] := If[Denominator[n] == 1, MaTeX[n, Magnification -> 1.5],
MaTeX["\\nicefrac{" <> ToString[Numerator[n]] <> "}{" <>
ToString[Denominator[n]] <> "}", Magnification -> 1.5]];

texStyle = {FontFamily -> "Latin Modern Roman", FontSize -> 14};

Plot[x, {x, 0, 3},
Ticks -> {{#, makeFrac[#]} & /@ Range[0, 3, 1/3], Automatic},
BaseStyle -> texStyle]


I would do both axes using Latex myself and not one to make it look better. And I think the fractions look better than using Mathematica's own typesetting ;)

ClearAll[fractionToRow]
fractionToRow = RawBoxes @*
ReplaceAll[FractionBox -> (RowBox[{#, "/", #2}] &)] @* ToBoxes @* TraditionalForm

plt1 = Plot[Sin@x, {x, 0, 2 Pi}, ImageSize -> 300,
Ticks -> {Range[0, 2 Pi, Pi/2], Automatic}];

plt2 = Plot[Sin@x, {x, 0, 2 Pi}, ImageSize -> 300,
Ticks -> {{#, fractionToRow @ #} & /@ Range[0, 2 Pi, Pi/2], Automatic}];

Row[{plt1, plt2}, Spacer[10]]


This approach works for simple inputs (as is usually the case for tick labeling).

Another example:

TraditionalForm[Style[Pi^(I/2)/ (I + E/Pi), 24]]


fractionToRow2 @ Style[Pi^(I/2)/ (I + E/Pi), 24]


\

For more complicated inputs more work may be needed for appropriate parsing.

• @Szabolcs, thank you for the generous bounty. – kglr Apr 14 at 5:25