Loading [MathJax]/jax/output/HTML-CSS/jax.js

First time here? Check out the FAQ!

Ask Your Question
4

Can I add mathematical formulas to a plot?

asked 12 years ago

Michael gravatar image

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 1x21.

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

Ideally using LaTeX to enter the formula.

Preview: (hide)

3 Answers

Sort by » oldest newest most voted
7

answered 12 years ago

Felix Lawrence gravatar image

updated 12 years ago

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).

Preview: (hide)
link

Comments

1

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

Michael gravatar imageMichael ( 12 years ago )

As for me, I didn't know about **r""** and thus just had been using two consecutive backslashes. For example, "frac1sqrt2". 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.

v_2e gravatar imagev_2e ( 12 years ago )
2

answered 12 years ago

Shashank gravatar image

updated 12 years ago

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()
Preview: (hide)
link

Comments

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

Michael gravatar imageMichael ( 12 years ago )
1

answered 12 years ago

kcrisman gravatar image

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.

Preview: (hide)
link

Your Answer

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

Add Answer

Question Tools

Stats

Asked: 12 years ago

Seen: 7,876 times

Last updated: Dec 27 '11