Ask Your Question

# Can I add mathematical formulas to a plot?

I know that using

text("Sage is really neat!!",(1,2))


one can easily add text to a plot in Sage. But searching the documentation I couldn't find a way to add a formula, say $\frac{1}{\sqrt{x^2-1}}$.

So is there a way to add a formula to a plot?

Ideally using LaTeX to enter the formula.

edit retag close merge delete

## 3 Answers

Sort by » oldest newest most voted

Shashank told you how to do it in matplotlib (which comes with Sage) - matplotlib allows you a lot of control over your plots (I often use it for this reason), but as you can see, it involves a fair bit of boilerplate compared to Sage's plotting.

If you want to add a formula to a Sage plot, then you can just use latex inside dollar signs, like you would in a .tex document:

text(r"Here's a formula $\frac{\sqrt{3}}{2}$ and some text",(1,2))


Here the r" is necessary due to all the slashes in the stringif you don't include the r then you'll have to escape each of the slashes (check out the python String documentation for more info on that).

more

## Comments

1

Thanks, this is the kind of solution I was hoping for.

( 2011-12-27 05:40:15 +0100 )edit

As for me, I didn't know about **r""** and thus just had been using two consecutive backslashes. For example, "$\\frac{1}{\\sqrt{2}}$". And it used to work for me. But now I think: is it a right way too or does it just work until one day... ? Thanks.

( 2011-12-27 13:38:40 +0100 )edit

Yes you can use the module rc in matplotlib to do it. I just modified a sample file I had to illustrate it.

from matplotlib import rc
from numpy import arange, cos, pi, sin, sqrt

import matplotlib.pyplot as plt
plt.rc('text', usetex=True)

plt.rc('font',**{'family':'serif','serif':['Computer Modern Roman'],'size':14})
fig = plt.figure(figsize=(4,2.7))
ax = fig.add_subplot(111)
t = arange(0.0, 1.0+0.01, 0.01)
u = 1/sqrt(t*t+1)

p2=plt.plot(t, u,'g-',label=r'$\frac{1}{\sqrt{x^2+1}}$')
l1=plt.legend(loc=1, borderaxespad=0.)
l1.draw_frame(0)

fig.subplots_adjust(left=0.17,bottom=0.20,right=0.96,top=0.95)
plt.xlabel(r'{time (s)}')
plt.ylabel(r'{voltage (mV)}')
labels = ax.get_xticklabels()

plt.savefig('tex_demo.eps')

plt.show()

more

## Comments

Thanks for this example, i'll need some time though to learn what all the commands do.

( 2011-12-27 05:39:46 +0100 )edit

Also, if you simply want to add a legend with LaTeX or to add labels for the axes, we have wrapped the matplotlib functionality for this. See for instance ways to mess with legends and the documentation for axes labels.

more

## Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

## Stats

Asked: 2011-12-26 17:11:26 +0100

Seen: 7,482 times

Last updated: Dec 27 '11