Re: [Matplotlib-users] align title of subplot with ylabel

2010-05-19 Thread hettling
Thanks for the suggestions, 'annotate' is what I need, I think.
I get errors though, also when I run the example scripts 
from here: 
http://matplotlib.sourceforge.net/trunk-docs/users/annotations_guide.html#using-complex-coordinate-with-annotation
 .

I get the error 'NoneType' object is not iterable when I try plt.show()
or try to save to eps.

So I am not sure if I have the correct version of matplotlib installed.
I checked out the newest matplotlib from the svn repository, removed my
current installed version and installed the version in the 'trunk/'
directory. 'annotate' did not work.
Later, I installed matplotlib from the '/branches/v0_99_maint'
directory. 
In both cases there were no errors in the installation, but still
'annotate' did not work.

Could it be that I have the wrong library from the svn repository
installed? Does r8319 mean release #8319? 

Kind Regards

Hannes

On Tue, 2010-05-18 at 13:34 -0400, Jae-Joon Lee wrote:
 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 hettl...@few.vu.nl 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
  https://lists.sourceforge.net/lists/listinfo/matplotlib-users
 



--

___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] align title of subplot with ylabel

2010-05-18 Thread Ryan May
On Mon, May 17, 2010 at 10:08 AM, hettling hettl...@few.vu.nl 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 haven't thought through the solution completely, but my intuition
says that this might be helpful:

http://matplotlib.sourceforge.net/examples/pylab_examples/anchored_artists.html
http://matplotlib.sourceforge.net/mpl_toolkits/axes_grid/users/overview.html#anchoredartists

These examples show ways of anchoring artists (like Text) to certain
locations. It's probably your best bet for getting what you want.

Ryan

-- 
Ryan May
Graduate Research Assistant
School of Meteorology
University of Oklahoma

--

___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] align title of subplot with ylabel

2010-05-18 Thread Jae-Joon Lee
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 hettl...@few.vu.nl 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
 https://lists.sourceforge.net/lists/listinfo/matplotlib-users


--

___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


[Matplotlib-users] align title of subplot with ylabel

2010-05-17 Thread hettling
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
https://lists.sourceforge.net/lists/listinfo/matplotlib-users