Here is my code:
import matplotlib.pyplot as plt plt.figure(1) # the first figure plt.subplot(211) # the first subplot in the first figure plt.plot([1, 2, 3]) plt.subplot(212) # the second subplot in the first figure plt.plot([4, 5, 6]) plt.figure(2) # a second figure plt.plot([4, 5, 6]) # creates a subplot(111) by default plt.text(.5,1.5,'211',figure = 211) #tring to add text in previous subplot plt.figure(1) # figure 1 current; subplot(212) still current plt.subplot(211) # make subplot(211) in figure1 current plt.title('Easy as 1, 2, 3') # subplot 211 title The error:
Traceback (most recent call last): File "C:/Users/ezhou/Desktop/python/test3.py", line 11, in <module> plt.text(.5,1.5,'211',figure = 211) File "C:\Python27\lib\site-packages\matplotlib\pyplot.py", line 3567, in text ret = gca().text(x, y, s, fontdict=fontdict, withdash=withdash, **kwargs) File "C:\Python27\lib\site-packages\matplotlib\axes\_axes.py", line 619, in text self._add_text(t) File "C:\Python27\lib\site-packages\matplotlib\axes\_base.py", line 1720, in _add_text self._set_artist_props(txt) File "C:\Python27\lib\site-packages\matplotlib\axes\_base.py", line 861, in _set_artist_props a.set_figure(self.figure) File "C:\Python27\lib\site-packages\matplotlib\artist.py", line 640, in set_figure raise RuntimeError("Can not put single artist in " RuntimeError: Can not put single artist in more than one figure I was trying to understand the kwargs 'figure' in class matplotlib.text.Text(), but it will always reply 'Can not put single artist in more than one figure'. So I was confused about how to use this 'figure' kwarg. Can anyone give me some advise? Thanks!
61 Answer
You shouldn't pass figure as a kwarg, instead use text method of a Figure (or Axes) instance. Example:
import matplotlib.pyplot as plt fig1, fig2 = plt.figure(1), plt.figure(2) sp1, sp2 = fig1.add_subplot(211), fig2.add_subplot(211) sp1.plot([1, 2, 3]) sp2.plot([0, 1, 3]) fig1.text(.5, .3, 'whole figure') sp2.text(.5, .5, 'subplot') Please note that coordinates are relative (0, 1).
P.S if you find matplotlib needlessly complicated (as I do), you may wish to have a look at Plotly
3