This can be done relatively easily with the current svn version of
matplotlib (r8319).
Below is the modified version of your code.
See
http://matplotlib.sourceforge.net/trunk-docs/users/annotations_guide.html#using-complex-coordinate-with-annotation
for how the annotation works.
While this is certainly possible with the released version, but it
will require you to write a few tens of lines of code. Basically, you
need create a custom Text class that update its position during the
drawing time.
Regards,
-JJ
###Code
import scipy
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(121)
plt.plot(scipy.sin(scipy.arange(1,100, 0.001)))
plt.xlabel('xlabel')
yl = plt.ylabel("ylabel")
plt.annotate("A", (0,1.), xycoords=(yl, "axes fraction"),
xytext=(0, 14), textcoords="offset points",
fontsize=14)
ax = fig.add_subplot(122)
plt.plot(scipy.cos(scipy.arange(1,100, 0.001)))
plt.xlabel('xlabel')
my_ticklabel = ax.get_yticklabels()[-2]
# Note that there is no guarantee that all ticklabels are drawn.
plt.annotate("B", (0,1.), xycoords=(my_ticklabel, "axes fraction"),
xytext=(0, 14), textcoords="offset points",
fontsize=14)
###End Code
···
On Mon, May 17, 2010 at 11:08 AM, hettling <hettling@...3062...> wrote:
Dear all,
I'm struggling with the following problem plotting my data:
I have a figure with two panels next to each other, which I want to
label 'A' and 'B'. I want to left-justify my panel labels, but not to
the box that contains the plot, but to the y-axis label. I played around
with 'text()' and 'title()', but did not find a good solution except for
giving the coordinates manually to 'text()'. This would be very
inconvenient though, because I have many different plots on different
scales.
Here is what I tried:
###Code
import scipy
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(121)
plt.plot(scipy.sin(scipy.arange(1,100, 0.001)))
plt.xlabel('xlabel')
plt.ylabel("ylabel")
plt.text(0,1,"A", fontsize=14, transform=ax.transAxes)
ax = fig.add_subplot(122)
plt.plot(scipy.cos(scipy.arange(1,100, 0.001)))
plt.text(0,1,"B", fontsize=14, transform=ax.transAxes)
plt.xlabel('xlabel')
###End Code
So the texts 'A' and 'B' should be a little bit higher and more to the
left. The 'A' I want to align with the y-axis label of the left plot,
the 'B' with the values of the y-axis of the right plot.
I hope my question is clear, I will appreciate any help!
Thanks in advance,
Hannes
------------------------------------------------------------------------------
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
matplotlib-users List Signup and Options