SourceForge logo
SourceForge logo
Menu

matplotlib-devel — matplotlib developers

You can subscribe to this list here.

2003 Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
(1)
Nov
(33)
Dec
(20)
2004 Jan
(7)
Feb
(44)
Mar
(51)
Apr
(43)
May
(43)
Jun
(36)
Jul
(61)
Aug
(44)
Sep
(25)
Oct
(82)
Nov
(97)
Dec
(47)
2005 Jan
(77)
Feb
(143)
Mar
(42)
Apr
(31)
May
(93)
Jun
(93)
Jul
(35)
Aug
(78)
Sep
(56)
Oct
(44)
Nov
(72)
Dec
(75)
2006 Jan
(116)
Feb
(99)
Mar
(181)
Apr
(171)
May
(112)
Jun
(86)
Jul
(91)
Aug
(111)
Sep
(77)
Oct
(72)
Nov
(57)
Dec
(51)
2007 Jan
(64)
Feb
(116)
Mar
(70)
Apr
(74)
May
(53)
Jun
(40)
Jul
(519)
Aug
(151)
Sep
(132)
Oct
(74)
Nov
(282)
Dec
(190)
2008 Jan
(141)
Feb
(67)
Mar
(69)
Apr
(96)
May
(227)
Jun
(404)
Jul
(399)
Aug
(96)
Sep
(120)
Oct
(205)
Nov
(126)
Dec
(261)
2009 Jan
(136)
Feb
(136)
Mar
(119)
Apr
(124)
May
(155)
Jun
(98)
Jul
(136)
Aug
(292)
Sep
(174)
Oct
(126)
Nov
(126)
Dec
(79)
2010 Jan
(109)
Feb
(83)
Mar
(139)
Apr
(91)
May
(79)
Jun
(164)
Jul
(184)
Aug
(146)
Sep
(163)
Oct
(128)
Nov
(70)
Dec
(73)
2011 Jan
(235)
Feb
(165)
Mar
(147)
Apr
(86)
May
(74)
Jun
(118)
Jul
(65)
Aug
(75)
Sep
(162)
Oct
(94)
Nov
(48)
Dec
(44)
2012 Jan
(49)
Feb
(40)
Mar
(88)
Apr
(35)
May
(52)
Jun
(69)
Jul
(90)
Aug
(123)
Sep
(112)
Oct
(120)
Nov
(105)
Dec
(116)
2013 Jan
(76)
Feb
(26)
Mar
(78)
Apr
(43)
May
(61)
Jun
(53)
Jul
(147)
Aug
(85)
Sep
(83)
Oct
(122)
Nov
(18)
Dec
(27)
2014 Jan
(58)
Feb
(25)
Mar
(49)
Apr
(17)
May
(29)
Jun
(39)
Jul
(53)
Aug
(52)
Sep
(35)
Oct
(47)
Nov
(110)
Dec
(27)
2015 Jan
(50)
Feb
(93)
Mar
(96)
Apr
(30)
May
(55)
Jun
(83)
Jul
(44)
Aug
(8)
Sep
(5)
Oct
Nov
(1)
Dec
(1)
2016 Jan
Feb
Mar
(1)
Apr
May
Jun
(2)
Jul
Aug
(3)
Sep
(1)
Oct
(3)
Nov
Dec
2017 Jan
Feb
(5)
Mar
Apr
May
Jun
Jul
(3)
Aug
Sep
(7)
Oct
Nov
Dec
2018 Jan
Feb
Mar
Apr
May
Jun
Jul
(2)
Aug
Sep
Oct
Nov
Dec
S M T W T F S



1
(13)
2
(9)
3
(4)
4
5
(1)
6
(4)
7
(4)
8
9
(1)
10
(2)
11
(1)
12
(1)
13
(3)
14
(1)
15
(5)
16
(3)
17
(18)
18
(2)
19
20
(1)
21
(4)
22
(9)
23
(3)
24
(2)
25
26
27
28
29
(1)
30
(1)


Showing 3 results of 3

From: cristini <pau...@un...> - 2005年06月16日 22:12:12
John Hunter wrote:
>>>>>>"paul" =3D=3D paul cristini <pau...@un...> writes:
>
>
> paul> The pick method because of the need to click on edges did
> paul> not fullfill my needs. So I wrote a new method Called
> paul> PickBigLine that does not required a mouse click close to
> paul> the edge but close to the line you want to pick. This is
> paul> particularly useful after zooming when the edges are
> paul> sometimes out of the axis limits. =20
>
>Hi Paul,
>
>It is not clear to me what this method is for. It would help if you
>posted an example where the current pick functionality failed and the
>one you propose succeeds (perhaps you could define your function at
>the top of the file for ease of use).
>
>I have a couple of questions/comments about your code...
>
> xt, yt =3D a.get_transform().numerix_x_y(xdata, ydata)
> xt, yt =3D asarray(xt), asarray(yt)=20
>
>There is no need to call asarray since numerix_x_y returns arrays.
>
>
> =20
> xc, yc =3D xt[1]-xt[0], yt[1]-yt[0]
>
>What is the point of this? Why do you only look at the points xt[1],
>xt[0], yt[1], yt[0]? What if someone needs to click on another point
>of the line?
>
> if xc=3D=3D0.0 and yc =3D=3D 0.0: return 1000000.
> D =3D xc*xc + yc*yc
> D1 =3D -(xt[0]-xywin[0])*yc+(yt[0]-xywin[1])*xc =
 =20
> D2 =3D -(yt[0]-xywin[1])*yc-(xt[0]-xywin[0])*xc
>
>What do D1 and D2 represent? I'm having trouble understanding why,
>for example, you need to do (xt[0]-xywin[0])*yc
>
> if D2/D>1.001 or D2/D<-0.001: return 1000000.
>
>I think the 1000000.0 sentinel value should be renamed to some useful
>constant name so it will be self documenting.
>
> return abs(D1/D)
>
>
> artists =3D self.lines
> if not len(artists): return None
> ds =3D [ (dist(a),a) for a in artists]
> ds.sort()
> return ds[0][1]
>
>
> paul> I also needed to add a
> paul> new property to Line2D called tag (similar to matlab) for
> paul> sorting purposes. I wonder if you have thought of adding
> paul> such a possibility to some objects for which it can be very
> paul> useful.
>
>Does the "label" property help here. Could you give a use case?
>
>Thanks!
>
>JDH
>
Sorry for the late answer but I had problems in designing a simple exampl=
e( I
had the very bad idea to letter "l" tas a key to press). Here it is :
from pylab import *
def pick(event):
 if event.key=3D=3D'p' and event.inaxes is not None:
 ax=3Devent.inaxes
 a=3Dax.pick(event.x,event.y)
 a.set_color('g')
 a.set_linewidth(2.)
 draw()
 if event.key=3D=3D'm' and event.inaxes is not None:
 ax=3Devent.inaxes
 a=3Dax.pickBigLine(event.x,event.y)
 a.set_color('g')
 a.set_linewidth(2.)
 draw()
#########################################################################=
###
def PlotTwoLines():
# hold(True)
 plot([0.,0.],[-100.,100.])
 plot([2.,2.],[-1.,1.])
 connect('key_press_event',pick)
 xmin,xmax,ymin,ymax=3Daxis()
 axis([xmin-1.,xmax+1.,ymin*1.1,ymax*1.1])
 show()
if __name__=3D=3D'__main__':
 PlotTwoLines()
Two way for picking a line the classical pick method by using the "p"key =
and
PickBigLine by using the "m" key.
The code just draw two lines a big one and a small one. The classical pic=
k
method works prefectly if you do not zoom to see the small line. But if y=
ou do a
zoom
to see more accurately the small line then it is impossible to pick the b=
ig line
unless you use PickBigLine.
Basically, PickBigLine evaluates the orthogonal distance from the selecte=
d point
to the line by calculating the intersection between the line you want to =
select
and a line passing through the selected point which is orthogonal.
Here is a modified version of PickBigLine taking into account your remark=
s and
working with Matplotlib 0.82
-------------------------------------------------------------------------=
-------------------------
 def pickBigLine(self, x, y, trans=3DNone):
 """
 Return the Line artist under point that is closest to the x, y. =
if trans
 is None, x, and y are in window coords, 0,0 =3D lower left. Othe=
rwise,
 trans is a matplotlib transform that specifies the coordinate sys=
tem
 of x, y.
 Calculates the orthogonal distance to the line
 Note this algorithm calculates distance to the vertices of the
 polygon, so if you want to pick a patch, click on the edge!
 """
 if trans is not None:
 xywin =3D trans.xy_tup((x,y))
 else:
 xywin =3D x,y
 def dist(a):
 Cste=3D1.e6
 xdata =3D a.get_xdata(valid_only =3D True)
 ydata =3D a.get_ydata(valid_only =3D True)
 # A point is not a line
 if len(xdata) =3D=3D 1: return Cste
 xt, yt =3D a.get_transform().numerix_x_y(xdata, ydata)
 xc, yc =3D xt[1]-xt[0], yt[1]-yt[0]
 if (xc=3D=3D0.0 and yc =3D=3D 0.0): return Cste
 D =3D xc*xc + yc*yc
 D1 =3D -(xt[0]-xywin[0])*yc+(yt[0]-xywin[1])*xc
 D2 =3D -(yt[0]-xywin[1])*yc-(xt[0]-xywin[0])*xc
 if D2/D>1.00001 or D2/D<-0.00001: return Cste
 return abs(D1/sqrt(D))
 artists =3D self.lines
 =20
 if not len(artists): return None
 ds =3D [ (dist(a),a) for a in artists]
 ds.sort()
 return ds[0][1]
-------------------------------------------------------------------------=
-----------
My interests are in ray tracing in geophysics. I am generating a lot of l=
ines
(thousands of) and then I need by zooming to identify trajectories conne=
cting a
source and a receiver. For example when I am picking a line I need to kno=
w to
what beam it belongs and also to what ray it coresponds (two integers for
instance). I don't know how to do it with the label property. It is an ax=
es
property not a line2D property.
If you want I can give an example of the use of the tag property I add.
Paul
From: John H. <jdh...@ac...> - 2005年06月16日 19:58:53
>>>>> "Ted" == Ted Drain <ted...@jp...> writes:
 Ted> John, Is there anything special required to get the subplot
 Ted> configuration tool available from QtAgg? I'm in the process
 Ted> of fixing that sizing problem reported last week and the only
 Ted> way to fix it was to change how the toolbar layout works so
 Ted> I'm mucking around in the toolbar right now.
 Ted> I guess I'll sync and take a look at the Gtk backend and see
 Ted> what happens in there...
Hi Ted,
It shouldn't be hard. The subplot configuration toolbar is a pure
matplotlib widget so all it requires id for your toolbar to embed it
into a properly sized qt canvas. This means your toolbar needs to
know how to make a canvas, so you need to subclass the toolbar gor
qtagg. What I did for GTK was add a "_get_canvas(self, fig)" method
to the toolbar. 
The base class binds the new subplots.png button to
configure_subplots, which looks like this -- note the line marked with
the arrow
class NavigationToolbar2GTK(NavigationToolbar2, gtk.Toolbar):
 ...snip...
 def configure_subplots(self, button):
 toolfig = Figure(figsize=(6,3))
====> canvas = self._get_canvas(toolfig)
 toolfig.subplots_adjust(top=0.9)
 tool = SubplotTool(self.canvas.figure, toolfig)
 w = int (toolfig.bbox.width())
 h = int (toolfig.bbox.height())
 window = gtk.Window()
 window.set_title("Subplot Configuration Tool")
 window.set_default_size(w, h)
 vbox = gtk.VBox()
 window.add(vbox)
 vbox.show()
 canvas.show()
 vbox.pack_start(canvas, True, True)
 window.show()
 def _get_canvas(self, fig):
 return FigureCanvasGTK(fig)
Then in gtkagg, I subclass the toolbar with
class NavigationToolbar2GTKAgg(NavigationToolbar2GTK):
 def _get_canvas(self, fig):
 return FigureCanvasGTKAgg(fig)
You might want to try the same approach for qtagg. Of course there is
no FigureCanvasQt, but this approach will make it easier if someone
wants to add a different renderer to Qt, eg QtCairo.
JDH
From: Steve C. <ste...@ya...> - 2005年06月16日 05:07:21
On Wed, 2005年06月15日 at 09:22 -0500, John Hunter wrote: 
> >>>>> "Steve" == Steve Chaplin <ste...@ya...> writes:
> 
> Steve> Figure.get_width_height() returns width, height as floats,
> Steve> but isn't width, height of a Figure always integers, and
> Steve> wouldn't it make sense to return these as integers?
> 
> Steve> This would enable changing the code: width, height =
> Steve> figure.get_width_height() width, height = int(width),
> Steve> int(height)
> 
> Steve> to simply: width, height = figure.get_width_height()
> 
> The width and height of a figure are width/height in inches * dpi, and
> both dpi and the width/height vars can be floats. So no, these values
> don't have to be integers. In the postscript backend, for example, it
> returns the width and height of the figure in points. We could add a
> convenience kwarg to the method, since in practice it is usually used
> by GUI developers who want the dimensions in pixels
> 
> w, h = fig.get_width_height(asinteger=True)
> 
> If you think this is a good idea, feel free to add it.
> 
> JDH
My understanding is, the frontend does all its calculations in floating
point and never uses fig.get_width_height() because its always dealing
width width, height in inches and dpi.
'grep' shows that fig.get_width_height() is not used by the frontend,
its only ever used by the backends so it does not really belong in
Figure it belongs it FigureCanvas.
The value of width/height in inches * dpi does not need to be integers,
but what about the ACTUAL width, height values that the backends
produce?
The backends will either draw to the display with width, height in
integer pixels, or create an output file png, ps, svg etc, which in most
(all?) cases will have integer width, height. 
Does it make sense having an output file 1200.8 x 900.6? What use is the
fractional point/pixel?
I ran './simple_plot.py -dAgg' with
"savefig('simple_plot.png', dpi=150.1)"
to see if I would get the theoretical 1200.8 x 900.6 images.
png and jpg gave 1200 x 900
for svg I used w,h in inches of 8.1, 6.1 (and the default 72 dpi)
the svg file says the width, height is 583.2, 439.2, yet gthumb
shows the image size as 583 x 439.
So there is definitely a float-to-integer conversion/truncation for
width, height taking place.
I suggest moving Figure.get_width_height() to
FigureCanvas.get_width_height() and returning integers. If a backend
really can produce float width, height it can simply override
get_width_height().
regards,
Steve
Send instant messages to your online friends http://au.messenger.yahoo.com 

Showing 3 results of 3

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.
Thanks for helping keep SourceForge clean.
X





Briefly describe the problem (required):
Upload screenshot of ad (required):
Select a file, or drag & drop file here.
Screenshot instructions:

Click URL instructions:
Right-click on the ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)

More information about our ad policies

Ad destination/click URL:

AltStyle によって変換されたページ (->オリジナル) /