Hi,

Sorry about the snippet, I will privide working code from now on.
I found a reproduction path for the error, it occurs (seemingly
random, but frequent) when there is more than one image in the plot
and you try to zoom. Code:

import Image
from pylab import *
im = Image.open("icon.png")

ax = subplot(111)
limx = ax.set_xlim((-5, 15))
limy = ax.set_ylim((-5, 15))
ax.set_autoscale_on(False)

[x0, y0], [x1, y1] = ax.bbox.get_points()

datawidth = limx[1] - limx[0]
dataheight = limy[1] - limy[0]
pixelwidth = x1 - x0
pixelheight = y1 - y0
adaptedwidth = im.size[0] * (datawidth / pixelwidth)
adaptedheight = im.size[1] * (dataheight / pixelheight)

for i in range(0,10,2):
    ax.imshow(im, origin="lower",
             extent=(i, i + adaptedwidth, i, i + adaptedheight))

plt.draw()
show()

Thank you very much for the support!
Bas

PS, @John, I'd like to try the imshow approach first because it is not
in a figure but in a QT frame containing several subplots. But thank
youfor the suggestion, I will try if the imshow approach appears
fruitless.


2009/8/2 Jae-Joon Lee <lee.j.j...@gmail.com>:
> A snippet of code does not help in general.
> Please take your time to create a simple, standalone code that
> reproduces your problem and post that code in this mailing list so
> that we can easily test.
>
> Here is the code, based on yours, that works for me.
>
>    im = Image.open("icon.jpg")
>
>    ax = gca()
>    limx = ax.get_xlim()
>    limy = ax.get_ylim()
>    ax.set_autoscale_on(False)
>
>    [x0, y0], [x1, y1] = ax.bbox.get_points()
>
>    datawidth = limx[1] - limx[0]
>    dataheight = limy[1] - limy[0]
>    pixelwidth = x1 - x0
>    pixelheight = y1 - y0
>    adaptedwidth = im.size[0] * (datawidth/pixelwidth)
>    adaptedheight = im.size[1] * (dataheight/pixelheight)
>
>    ax.imshow(im, origin="lower",
>              extent=(0.5, 0.5+adaptedwidth, 0.5, 0.5+adaptedheight))
>
>
>    plt.draw()
>
> -JJ
>
>
>
> On Fri, Jul 31, 2009 at 3:44 PM, Bas van Leeuwen<leeu...@gmail.com> wrote:
>> Hello,
>>
>> I tried to implement a solution for this issue. Basically I want to
>> give the x and y position in datacoords and the width + height in
>> pixels.
>> However, when using the following code:
>>
>>            im = Image.open("../Icons/Program Icon.png")
>>
>>            limx = self.mainAxes.get_xlim()
>>            limy = self.mainAxes.get_ylim()
>>
>>            [x0, y0], [x1, y1] = self.mainAxes.bbox.get_points()
>>
>>            datawidth = limx[1] - limx[0]
>>            dataheight = limy[1] - limy[0]
>>            pixelwidth = x1 - x0
>>            pixelheight = y1 - y0
>>            adaptedwidth = im.size[0] * (datawidth/pixelwidth)
>>            adaptedheight = im.size[1] * (dataheight/pixelheight)
>>
>>
>>            for peak in Blocks.peaks(self.quote.Close,
>> self.peakSpanSlider.value()):
>>                self.mainAxes.imshow(im, origin = 'lower', extent =
>> (date2num(peak.datetime), date2num(peak.datetime) + 100 , 400, 425)) #
>> left right bottom top
>>            self.mainAxes.set_xlim(limx)
>>            self.mainAxes.set_ylim(limy)
>>
>> There is no visible result. When zooming in to a place where an image
>> should be present I encounter the following error every time I move
>> the mouse.
>>
>> Traceback (most recent call last):
>>  File "C:\Python25\lib\site-packages\matplotlib\backends\backend_qt4.py",
>> line 135, in mouseReleaseEvent
>>    FigureCanvasBase.button_release_event( self, x, y, button )
>>  File "C:\Python25\lib\site-packages\matplotlib\backend_bases.py",
>> line 1198, in button_release_event
>>    self.callbacks.process(s, event)
>>  File "C:\Python25\lib\site-packages\matplotlib\cbook.py", line 155, in 
>> process
>>    func(*args, **kwargs)
>>  File "C:\Python25\lib\site-packages\matplotlib\backend_bases.py",
>> line 2048, in release_zoom
>>    self.draw()
>>  File "C:\Python25\lib\site-packages\matplotlib\backend_bases.py",
>> line 2070, in draw
>>    self.canvas.draw()
>>  File "C:\Python25\lib\site-packages\matplotlib\backends\backend_qt4agg.py",
>> line 133, in draw
>>    FigureCanvasAgg.draw(self)
>>  File "C:\Python25\lib\site-packages\matplotlib\backends\backend_agg.py",
>> line 279, in draw
>>    self.figure.draw(self.renderer)
>>  File "C:\Python25\lib\site-packages\matplotlib\figure.py", line 772, in draw
>>    for a in self.axes: a.draw(renderer)
>>  File "C:\Python25\lib\site-packages\matplotlib\axes.py", line 1545, in draw
>>    im.draw(renderer)
>>  File "C:\Python25\lib\site-packages\matplotlib\image.py", line 233, in draw
>>    im = self.make_image(renderer.get_image_magnification())
>>  File "C:\Python25\lib\site-packages\matplotlib\image.py", line 220,
>> in make_image
>>    rx = widthDisplay / numcols
>> ZeroDivisionError: float division
>>
>> Any idea what might cause this issue? Did I do something wrong? I know
>> it's not pretty, but it should work right?
>>
>> Cheers!
>> Bas
>>
>>
>>
>> 2009/7/30 Bas van Leeuwen <leeu...@gmail.com>:
>>> Hi JJ,
>>>
>>> Thank you for your kind and speedy reply, I completely glanced over
>>> the extent parameter.
>>> Datacoords are actually what I need so this is perfect for me.
>>>
>>> To clarify what I want, I want to mark certain parts of a graph with
>>> an icon representing the reason it's interesting. Icons are for peaks,
>>> trends, correlation, etc.
>>>
>>> Thank you very much!
>>>
>>> Bas
>>>
>>>
>>> 2009/7/30 Jae-Joon Lee <lee.j.j...@gmail.com>:
>>>> The location of the image can be set by specifying the "extent"
>>>> keyword, however, this is set in data coordinate.
>>>> figimage may be close to what you want.
>>>>
>>>> http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.figimage
>>>>
>>>> As far as I know, there is no direct support in matplotlib to place an
>>>> image with arbitrary transformation. But it may not be difficult to
>>>> implement. However, "annotate a plot with icons" is not enough to
>>>> figure out what you really want.
>>>> Maybe some screenshots from other plotting tool will be helpful. Or,
>>>> please elaborate how you want to position your image.
>>>>
>>>> -JJ
>>>>
>>>>
>>>> On Thu, Jul 30, 2009 at 12:11 PM, Bas van Leeuwen<leeu...@gmail.com> wrote:
>>>>> Hi all,
>>>>>
>>>>> Is there any way to annotate a plot with icons?
>>>>> The only way to include an image that I've found is using imshow, but
>>>>> imshow does not accept (x,y) coordinates.
>>>>>
>>>>> There probably is an easy solution, but I have not been able to find
>>>>> any. Please be patient :-)
>>>>>
>>>>> Thank you in advance for your reply,
>>>>> Bas van Leeuwen
>>>>>
>>>>> PS, I'm sorry if this mail arrives multiple times, I didn't see the
>>>>> previous one in the archive.
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 
>>>>> 30-Day
>>>>> trial. Simplify your report design, integration and deployment - and 
>>>>> focus on
>>>>> what you do best, core application coding. Discover what's new with
>>>>> Crystal Reports now.  http://p.sf.net/sfu/bobj-july
>>>>> _______________________________________________
>>>>> Matplotlib-users mailing list
>>>>> Matplotlib-users@lists.sourceforge.net
>>>>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>>>>>
>>>>
>>>
>>
>> ------------------------------------------------------------------------------
>> Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
>> trial. Simplify your report design, integration and deployment - and focus on
>> what you do best, core application coding. Discover what's new with
>> Crystal Reports now.  http://p.sf.net/sfu/bobj-july
>> _______________________________________________
>> Matplotlib-users mailing list
>> Matplotlib-users@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>>
>

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to