Text in plots

class sage.plot.text.Text(string, point, options)

Bases: sage.plot.primitive.GraphicPrimitive

Base class for Text graphics primitive.


We test creating some text:

sage: text("I like Fibonacci",(3,5))

Returns a dictionary with the bounding box data. Notice that, for text, the box is just the location itself.


sage: T = text("Where am I?",(1,1))
sage: t=T[0]
sage: t.get_minmax_data()['ymin']
sage: t.get_minmax_data()['ymax']

Plots 2D text in 3D.


sage: T = text("ABC",(1,1))
sage: t = T[0]
sage: s=t.plot3d()
sage: s.jmol_repr(s.testing_render_params())[0][2]
'label "ABC"'
sage: s._trans
(1.0, 1.0, 0)
sage.plot.text.text(string, xy, clip=False, vertical_alignment='center', rgbcolor=(0, 0, 1), fontsize=10, horizontal_alignment='center', axis_coords=False, **options)

Returns a 2D text graphics object at the point \((x,y)\).

Type text.options for a dictionary of options for 2D text.


  • fontsize - How big the text is
  • rgbcolor - The color as an RGB tuple
  • hue - The color given as a hue
  • rotation - How to rotate the text: angle in degrees, vertical, horizontal
  • vertical_alignment - How to align vertically: top, center, bottom
  • horizontal_alignment - How to align horizontally: left, center, right
  • axis_coords - (default: False) if True, use axis coordinates, so that (0,0) is the lower left and (1,1) upper right, regardless of the x and y range of plotted values.


sage: text("Sage is really neat!!",(2,12))

The same text in larger font and colored red:

sage: text("Sage is really neat!!",(2,12),fontsize=20,rgbcolor=(1,0,0))

Same text but guaranteed to be in the lower left no matter what:

sage: text("Sage is really neat!!",(0,0), axis_coords=True, horizontal_alignment='left')

Same text rotated around the left, bottom corner of the text:

sage: text("Sage is really neat!!",(0,0), rotation=45.0, horizontal_alignment='left', vertical_alignment='bottom')

Same text oriented vertically:

sage: text("Sage is really neat!!",(0,0), rotation="vertical")

You can also align text differently:

sage: t1 = text("Hello",(1,1), vertical_alignment="top")
sage: t2 = text("World", (1,0.5), horizontal_alignment="left")
sage: t1 + t2   # render the sum

You can save text as part of PDF output:

sage: text("sage", (0,0), rgbcolor=(0,0,0)).save(os.path.join(SAGE_TMP, 'a.pdf'))

Text must be 2D (use the text3d command for 3D text):

sage: t = text("hi",(1,2,3))
Traceback (most recent call last):
ValueError: use text3d instead for text in 3d
sage: t = text3d("hi",(1,2,3))

Extra options will get passed on to show(), as long as they are valid:

sage: text("MATH IS AWESOME", (0, 0), fontsize=40, axes=False)
sage: text("MATH IS AWESOME", (0, 0), fontsize=40).show(axes=False) # These are equivalent

Previous topic

Scatter Plots

Next topic


This Page