Re: [Matplotlib-users] hide labels

2011-02-06 Thread Paul Ivanov
Francesco Montesano, on 2011-02-04 17:01,  wrote:
 Dear all again,
 
 I've tried to play with it again, but I couldn't find a
 solution for the problem.  For clarity I report an example of
 what each of the subplots looks like:

Hi Francesco,

thanks for the clarification, here are two ways to get the look
you want. I added some comments to help you understand what was
going on before. (The resulting figure is attached, just in case).

import numpy as np
import matplotlib.pyplot as plt
mean=np.array([-0.9206394, -0.90127456, -0.91983625, -0.97765539, -1.02991184,
-1.02267017, -0.97730167, -0.93715172, -0.94324653, -0.92884379])
stddev= np.array([0.16351397,0.15075966,0.13413909,0.15404823,0.13559582, 
0.13109754,0.12128598,0.11589682,0.11921571,0.10866761])

ax = plt.figure().add_axes([0.1,0.1,0.8,0.8])
ax.errorbar(np.arange(10,20)/100., mean, yerr=stddev)

ax.set_xlim([0.095, 0.195])

lab = ax.get_ymajorticklabels()
plt.draw() # ticks only get text assigned during a call to draw
print lab
for i in lab: 
print i # note that \u2212 is a unicode minus sign

# this work for the first draw - relies on l.get_text() returning
# nothing for labels which aren't used/drawn - which isn't the
# case in general after panning and zooming interactively
shown_lab = [l for l in lab if l.get_text()]
shown_lab[0].set_visible(False)
shown_lab[-1].set_visible(False)

## alternative solution without extra draw(). more robust, can be
## used even after initial draw.
#ymin,ymax = ax.get_ylim()
#tl = ax.yaxis.get_majorticklocs()
#lab[(tlymin).sum()].set_visible(False)
#lab[-(tlymax).sum()-1].set_visible(False)

## hybrid of the two.
#ymin,ymax = ax.get_ylim()
#tl = ax.yaxis.get_majorticklocs()
#shown_lab = [l for l,t  in zip(lab,tl) if tymin and tymax)
#shown_lab[0].set_visible(False)
#shown_lab[-1].set_visible(False)

plt.show()


best,
-- 
Paul Ivanov
314 address only used for lists,  off-list direct email at:
http://pirsquared.org | GPG/PGP key id: 0x0F3E28F7 
attachment: hide-ticklabels.png

signature.asc
Description: Digital signature
--
The modern datacenter depends on network connectivity to access resources
and provide services. The best practices for maximizing a physical server's
connectivity to a physical network are well understood - see how these
rules translate into the virtual world? 
http://p.sf.net/sfu/oracle-sfdevnlfb___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] hide labels

2011-02-06 Thread Jae-Joon Lee
For an interactive use, you may use callbacks to update the visibility
of ticks automatically.
Regards,

-JJ


import matplotlib.transforms as mtransforms

def update_yticks(ax):

axis = ax.yaxis
interval = axis.get_view_interval()

# get visible ticks
myticks = [t for t in axis.iter_ticks() \
   if mtransforms.interval_contains(interval, t[1])]

# make all ticks visible again
for mytick in myticks: mytick[0].label1.set_visible(True)

# make first tick invisible
myticks[0][0].label1.set_visible(False)

# make last tick invisible
myticks[-1][0].label1.set_visible(False)


import matplotlib.pyplot as plt

ax = plt.subplot(111)
update_yticks(ax)
cid = ax.callbacks.connect('ylim_changed', update_yticks)




On Sun, Feb 6, 2011 at 5:17 PM, Paul Ivanov pivanov...@gmail.com wrote:
 Francesco Montesano, on 2011-02-04 17:01,  wrote:
 Dear all again,

 I've tried to play with it again, but I couldn't find a
 solution for the problem.  For clarity I report an example of
 what each of the subplots looks like:

 Hi Francesco,

 thanks for the clarification, here are two ways to get the look
 you want. I added some comments to help you understand what was
 going on before. (The resulting figure is attached, just in case).

 import numpy as np
 import matplotlib.pyplot as plt
 mean=np.array([-0.9206394, -0.90127456, -0.91983625, -0.97765539, -1.02991184,
    -1.02267017, -0.97730167, -0.93715172, -0.94324653, -0.92884379])
 stddev= np.array([0.16351397,0.15075966,0.13413909,0.15404823,0.13559582, 
 0.13109754,0.12128598,0.11589682,0.11921571,0.10866761])

 ax = plt.figure().add_axes([0.1,0.1,0.8,0.8])
 ax.errorbar(np.arange(10,20)/100., mean, yerr=stddev)

 ax.set_xlim([0.095, 0.195])

 lab = ax.get_ymajorticklabels()
 plt.draw() # ticks only get text assigned during a call to draw
 print lab
 for i in lab:
    print i # note that \u2212 is a unicode minus sign

 # this work for the first draw - relies on l.get_text() returning
 # nothing for labels which aren't used/drawn - which isn't the
 # case in general after panning and zooming interactively
 shown_lab = [l for l in lab if l.get_text()]
 shown_lab[0].set_visible(False)
 shown_lab[-1].set_visible(False)

 ## alternative solution without extra draw(). more robust, can be
 ## used even after initial draw.
 #ymin,ymax = ax.get_ylim()
 #tl = ax.yaxis.get_majorticklocs()
 #lab[(tlymin).sum()].set_visible(False)
 #lab[-(tlymax).sum()-1].set_visible(False)

 ## hybrid of the two.
 #ymin,ymax = ax.get_ylim()
 #tl = ax.yaxis.get_majorticklocs()
 #shown_lab = [l for l,t  in zip(lab,tl) if tymin and tymax)
 #shown_lab[0].set_visible(False)
 #shown_lab[-1].set_visible(False)

 plt.show()


 best,
 --
 Paul Ivanov
 314 address only used for lists,  off-list direct email at:
 http://pirsquared.org | GPG/PGP key id: 0x0F3E28F7

 -BEGIN PGP SIGNATURE-
 Version: GnuPG v1.4.10 (GNU/Linux)

 iEYEARECAAYFAk1OWQMACgkQe+cmRQ8+KPekfgCfcY+R1vb2i/l/AoVsFZwsyqCC
 ihoAn1uni4kEu4Kq+B0IdCu26Kw1aA9Q
 =B6ZO
 -END PGP SIGNATURE-

 --
 The modern datacenter depends on network connectivity to access resources
 and provide services. The best practices for maximizing a physical server's
 connectivity to a physical network are well understood - see how these
 rules translate into the virtual world?
 http://p.sf.net/sfu/oracle-sfdevnlfb
 ___
 Matplotlib-users mailing list
 Matplotlib-users@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-users



--
The modern datacenter depends on network connectivity to access resources
and provide services. The best practices for maximizing a physical server's
connectivity to a physical network are well understood - see how these
rules translate into the virtual world? 
http://p.sf.net/sfu/oracle-sfdevnlfb
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] hide labels

2011-02-04 Thread Francesco Montesano
Dear all again,

I've tried to play with it again, but I couldn't find a solution for
the problem.
For clarity I report an example of what each of the subplots looks like:

 import numpy as np
 import matplotlib.pyplot as plt
 mean = np.array([-0.9206394,  -0.90127456, -0.91983625, -0.97765539, 
 -1.02991184, -1.02267017, -0.97730167, -0.93715172, -0.94324653, -0.92884379])
 stddev = np.array([0.16351397, 0.15075966,  0.13413909,  0.15404823,  
 0.13559582,  0.13109754,  0.12128598,  0.11589682,  0.11921571,  0.10866761])

 ax = plt.figure().add_axes([0.1,0.1,0.8,0.8])
 ax.errorbar(np.arange(10,20)/100., mean, yerr=stddev)

 ax.set_xlim([0.095, 0.195])
 lab = ax.get_ymajorticklabels()

 print lab
 for i in lab:
  print i

 plt.show()

as output of this script I get
 a list of 7 Text yticklabel objects
 Text(0,0,'')
 Text(0,0,'')
 Text(0,0,'')
 Text(0,0,'')
 Text(0,0,'')
 Text(0,0,'')
 Text(0,0,'')
In the plot instead I only have only 5 y tick labels, as visible from
the attachment. In this case if I set the first and the last label
invisible, nothing changes, and if I have other plots under this the
plot becomes ugly/unreadable.

I hope to have been clearer than in my previous mail.
Any suggestion on how to fix or find a workaround in order to get the
same number of tick labels as the ones actually plotted.

Thank in advance
Fra


2011/2/1 Francesco Montesano franz.berges...@googlemail.com:
 Dear all,

 I'm producing a single figure with subplots arrange in a single columns.
 They all share the same x range but the y variable change from subplot to
 subplot

 In order have a nicer figure I hide the first and the last y label of each
 subplot in the following way

 ytl = subpl.get_ymajorticklabels()
 ytl[0].set_visible(False)
 ytl[-1].set_visible(False)

 It was well in most cases. But I've noticed that in some plot the first
 and/or the last label remains.
 In this cases, if I print ytl, it writes a list of n Text yticklabel
 objects, where n is larger by 1 or 2 than the number of labels shown
 before I make them invisible.
 So I end up having some label (nearly) exactly on the upper and/or bottom
 range of the plot.

 Is there a way to force the axis to return exactly the number of labels
 shown in the plot?

 Thanks in advance,

 Francesco






--
personals: monty...@yahoo.it, monte_...@hotmail.com (messenger),
franz.berges...@googlemail.com.
work: monte...@mpe.mpg.de

http://picasaweb.google.it/franz.bergesund
attachment: example.png--
The modern datacenter depends on network connectivity to access resources
and provide services. The best practices for maximizing a physical server's
connectivity to a physical network are well understood - see how these
rules translate into the virtual world? 
http://p.sf.net/sfu/oracle-sfdevnlfb___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


[Matplotlib-users] hide labels

2011-02-01 Thread Francesco Montesano
Dear all,

I'm producing a single figure with subplots arrange in a single columns.
They all share the same x range but the y variable change from subplot to
subplot

In order have a nicer figure I hide the first and the last y label of each
subplot in the following way

 ytl = subpl.get_ymajorticklabels()
 ytl[0].set_visible(False)
 ytl[-1].set_visible(False)


It was well in most cases. But I've noticed that in some plot the first
and/or the last label remains.
In this cases, if I print ytl, it writes a list of n Text yticklabel
objects, where n is larger by 1 or 2 than the number of labels shown
before I make them invisible.
So I end up having some label (nearly) exactly on the upper and/or bottom
range of the plot.

Is there a way to force the axis to return exactly the number of labels
shown in the plot?

Thanks in advance,

Francesco
--
Special Offer-- Download ArcSight Logger for FREE (a $49 USD value)!
Finally, a world-class log management solution at an even better price-free!
Download using promo code Free_Logger_4_Dev2Dev. Offer expires 
February 28th, so secure your free ArcSight Logger TODAY! 
http://p.sf.net/sfu/arcsight-sfd2d___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users