7

I need to use a sub/superscript to label the x-axis variable on the horizontal axis of my plot.

Mathematica returns the variable as italicized, but only the $x^2$ needs to be italicized, but not the subscript $g$.

I tried using both Subsuperscript and with the control+6 and _, but both yielded the same results.

Code:

ListPlot[{1, 4, 5}, Frame -> True, 
  FrameLabel -> (
    {"\!\(\*SuperscriptBox[SubscriptBox[\(x\), \(g\)], \ \(2\)]\)", 
     "y"
    })]

Corresponding plot:

enter image description here

m_goldberg
  • 107,779
  • 16
  • 103
  • 257
chemEngiNerd
  • 287
  • 1
  • 7

4 Answers4

5

I'm adding this answer because I think it is the simplest solution.

ListPlot[{1, 4, 5},
 Frame -> True,
 FrameLabel -> {Subsuperscript[x, g, 2], y}]

plot

Edit

Johu has a raised a valid issue in his comment. Here is a solution that addresses it.

ListPlot[{1, 4, 5},
 Frame -> True,
 FrameLabel -> {Subsuperscript[Style["x", "TI"], Style["g", "TR"], "2"], "y"}]

Mathematica graphics

If someone asks where the mystical "TI" and "TR" styles come from: They are heavily used in the reference pages. So if you see something like this in the documentation

img

you can use Ctrl+Shift+E to see the underlying box-expression and you will note that the same style-definitions are used.

Note

Quite a lot of information on named styles such "TR" can be found on this page

m_goldberg
  • 107,779
  • 16
  • 103
  • 257
  • -1 as g is still italic? – Johu Sep 11 '18 at 21:47
  • @Johu. Valid point. I have addressed it in an edit to the answer – m_goldberg Sep 11 '18 at 21:59
  • Thank you all!! :) Greatly appreciate it! – chemEngiNerd Sep 11 '18 at 22:00
  • Now it is a really over-complicated solution. "TR" does the same as FontSlant -> "Plain" which does nothing to solve this problem. Making subscript to String is what makes the difference and it also makes sense semantically. – Johu Sep 11 '18 at 22:56
  • For example TraditionalForm[Style[Subscript[x, g], FontSlant -> Plain]] gives still italic text. – Johu Sep 11 '18 at 22:59
  • @Johu One advantage of having the style defined like this is that it doesn't get destroyed when you set e.g. FrameStyle -> Italic. In this case every tick and label would be italic, but your styled $x^2_g$ keeps its format. – halirutan Sep 11 '18 at 23:12
  • @halirutan I agree to that. – Johu Sep 11 '18 at 23:21
3
ListPlot[{1, 4, 5}, Frame -> True, ImageSize -> Tiny, 
  FrameLabel -> ({Subsuperscript[x, "g", 2], "y"})]~Magnify~3

enter image description here

I think it happens because StandardForm for output plots has TraditionalForm applied to it. TraditionalForm formats differently String-s and Symbol-s. Example:

Magnify[Subsuperscript["x", "g", 2] // TraditionalForm, 2]
Magnify[Subsuperscript[x, "g", 2] // TraditionalForm, 2]

enter image description here

Johu
  • 4,918
  • 16
  • 43
3

In my opinion, it is better to avoid linear syntax strings (the kind of strings you get when you apply 2D typesetting structures inside of a string) and instead just use expressions. So, I like this:

Superscript[Subscript[x, g], 2]

instead of:

"\!\(\*SuperscriptBox[SubscriptBox[\(x\), \(g\)], \ \(2\)]\)"

Now, the reason that some characters get italicized is because by default ListPlot renders labels in TraditionalForm, and TraditionalForm uses the option SingleLetterItalics->True. So, to avoid having g italicized, you could override this with:

FrameLabel -> {Superscript[Subscript[x, Style[g, Plain]], 2], y}

or:

FrameLabel -> {Superscript[Subscript[x, "g"], 2], y}

where the latter works because "g" is not a single letter symbol.

Visualization:

ListPlot[
    {1, 4, 5},
    Frame -> True,
    FrameLabel -> {Superscript[Subscript[x, Style[g, Plain]], 2], y}
]

enter image description here

Carl Woll
  • 130,679
  • 6
  • 243
  • 355
2

That's also a typical usage case for the MaTeX-package by Szabolcs:

Needs["MaTeX`"]
ListPlot[{1, 4, 5}, 
 Frame -> True, 
 FrameLabel -> ({MaTeX["x_{\\mathrm{g}}^2"], MaTeX["y"]})
 ]

enter image description here

Henrik Schumacher
  • 106,770
  • 7
  • 179
  • 309