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 want to put somewhat complicated, or at least non-standardly formatted, text on some of my graphics. For example, I'd like to be able to use f^[4](x) (where the ^[4] should obviously be a superscript rather than f^(4)[x] for the fourth derivative as a plot label. I'd like to control the formatting of various mathematical objects (for example, I'd like x^2+x+1 to be written that way rather than as 1+x+x^2), and the like.

The only way I've found for doing this is actually building up the string using StyleBox'es, which is both time-consuming and ugly. Am I missing something?

share|improve this question
    
Have you looked into TraditionalForm? –  David Carraher Jun 18 '12 at 20:31
    
You may use Rowand typeset "offending" parts as strings. –  Peter Breitfeld Jun 18 '12 at 20:36
    
Please include a sample of the StyleBox code you are using that produces the output you desire. –  Mr.Wizard Jun 18 '12 at 20:39
    
Here are two previous answers that address these issues: Formula Formatting is Small and Chunky? and Using a function name instead of its definition in AxesLabel –  Jens Jun 18 '12 at 20:39
add comment

2 Answers 2

up vote 9 down vote accepted

The general answer for what you appear to be doing is to wrap your expressions in HoldForm. However, it depends on how you include the expression. For example, here I'm using PlotLabel and have no problem:

Plot[x^2 + x + 1, {x, 0, 1}, PlotLabel -> x^2 + x + 1] 

plotlabel

However, what if I want to permute the order of the terms to x + 1 + x^2? Then HoldForm does the job:

Plot[x^2 + x + 1, {x, 0, 1}, PlotLabel -> HoldForm[x + 1 + x^2]]

plotlabel 2

Edit

I just noticed the second part of your question about the derivative format. The documentation on formatting is indeed somewhat confusing because it's spread through different pages. Maybe that has to do with the fact that there are so many different methods that it's hard to identify the "officially preferred" approach. I'm thinking, for example, of the Notation package which seems like it's supposed to make custom notation easier but which is actually a bit clumsy to use.

The default style for labels in plots is TraditionalForm, so I'll restrict the style modifications to that particular output form. Here is one way that you could make plot labels appear with the formatting for derivatives that you describe in the question:

Derivative /: 
 MakeBoxes[Derivative[\[Alpha]__][f1_][vars__Symbol], 
  TraditionalForm] := RowBox[
  Flatten@{SuperscriptBox[ToBoxes[f1], 
     RowBox[Flatten@{"[", Riffle[Map[ToBoxes, {\[Alpha]}], ","], 
        "]"}]], "(", Riffle[Map[ToBoxes, {vars}], ","], ")"}]

Now you should be able to do the following:

Plot[x^2 + x + 1, {x, 0, 1}, PlotLabel -> HoldForm[f'[x]]]

and the plot label will look like this:

$f^{[1]}(x)$

I added some extra logic to the style definition to make it work with higher-order derivatives and many variables, too.

As another example, you would input a mixed higher-order derivative like HoldForm[Derivative[1, 2][f][x, y]] and the display would be

$f^{[1,2]}(x,y)$

This modification will affect the display of all derivatives that were entered using the Derivative keyword when the output format is TraditionalForm. So if you want it to appear that way when TraditionalForm isn't the default, you'll have to wrap the expression in TraditionalForm explicitly. Also note that the TraditionalForm display of the alternative derivative D[f[x],x] is not affected by the new format, whereas f'[x] is. So you can still choose between two different TraditionalForm appearances for derivatives - a nontraditional and a traditional one...

Edit 2

Some additional links:

share|improve this answer
    
Thanks. I didn't find this in the docs, somehow. That should solve many problems -- but how about formatting higher derivatives using [n] rather than (n)? Must that be hand-coded, or is there some other way? –  rogerl Jun 19 '12 at 12:05
    
I've added an answer to the second part of your question. You have to hand-code the formatting once, of course; but then it will be automatic whenever you display Derivatives in TraditionalForm. –  Jens Jun 19 '12 at 16:09
add comment

Just in case you want to have it somewhere inside the image, rather than as a label, you may use Epilog like this:

 Plot[x^2 + x + 1, {x, 0, 1}, 
 Epilog -> 
   Inset[Style["\!\(\*SuperscriptBox[\(x\), \(2\)]\)+x+1", 16, Red, 
   Italic], Scaled[{0.6, 0.2}]], ImageSize -> 200]

giving you this

Example image 1

Otherwise you may use Show[ ] to combine your graphic with any text (that should be first transformed into a graphic object):

 Show[{Plot[x^2 + x + 1, {x, 0, 1}, ImageSize -> 200],
   Graphics[
   Text[Style["\!\(\*SuperscriptBox[\(x\), \(2\)]\)+x+1", 16, 
   RGBColor[0, 0.7, 0], Italic], Scaled[{0.4, 0.6}]]]
 }] 

Example image 2

share|improve this answer
    
Where is the documentation on the syntax "!(*SuperscriptBox[(x), (2)])+x+1"? –  rogerl Jun 19 '12 at 12:07
1  
Oh, I just typed the formula between the quotes in the Style operator; plain in my notebook as to get it in the form it is presented on the graph. It may be done, say, using the Basic Math Input palette. But when copy-pasting it here all these strange things (like \!(*SuperscriptBox[(x), (2)])) appeared. Excuse me for have not noticed them. One may use the following: Graphics[Text[ Style[TraditionalForm[x^4 + x + 1], 16, RGBColor[0, 0.7, 0], Italic], Scaled[{0.4, 0.6}]]] instead. –  Alexei Boulbitch Jun 20 '12 at 7:35
add comment

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.