Hello,
I’m trying to plot a simple list of x/y coords over an image (.png). I can show the image, or plot the data, but cannot find a way to layer one over the other. I would greatly appreciate someone pointing me in the right direction. Thanks.
Hello,
I’m trying to plot a simple list of x/y coords over an image (.png). I can show the image, or plot the data, but cannot find a way to layer one over the other. I would greatly appreciate someone pointing me in the right direction. Thanks.
The python imaging library is pretty good for this kind of thing.
http://www.pythonware.com/library/pil/handbook/
Here’s an (untested) example. Hope it helps.
Jake
#!/usr/bin/env python
from pylab import scatter, save
import Image
#get the background image, and find out how big it is
im_bg = Image.open(“background.png”)
bg_width, bg_height = im.size
#make a white canvas on which to paste the background image and the scatter plot
#this will allow you to, say, have the x- and y-axis values fall outside of the background image’s limits
im_canvas = Image.new(“RGBA”, (bg_width+60, bg_height+60), (255, 255, 255, 0))
#create the scatter plot from x and y data with matplotlib
scatter(x, y, s=sizes, alpha=0.75)
#save the scatter plot, and then retrieve it for use in PIL, convert to RGBA so that alpha levels will work
#there is probably a better way to do this with gcf() or gci()…
savefig(“scatter_plot.png”)
im_scatter = Image.open(“scatter_plot.png”).convert(“RGBA”)
#resize the scatter image to make it fit nice
im_scatter.resize((bg_width+10, bg_height+10))
#bring all of the images together by pasting them onto the white canvas, use the overlayed image as the mask (third element)
im_canvas.paste(im_bg, (30, 30), im_bg) #play around with the paste locations (30, 30)
im_canvas.paste(im_scatter, (10, 30), im_scatter) #these won’t be perfect the first time (10, 30)
#save it
im_canvas.save(“combo_image.png”)
From: __ [mailto:redshifted@…287…]
Sent: Sunday, June 10, 2007 5:22 PM
To: matplotlib-users@lists.sourceforge.net
Subject:
[Matplotlib-users] Simple scatter plot over an image
Hello,
I’m trying to plot a simple list of x/y coords over an image (.png). I can show the image, or plot the data, but cannot find a way to layer one over the other. I would greatly appreciate someone pointing me in the right direction. Thanks.
Just call imshow and set the "extent" kwarg to let mpl know about the
coordinates of the image, and then call scatter. See
examples/image_demo2.py in the mpl src distribution, ot at
http://matplotlib.sourceforge.net/examples/image_demo2.py
JDH
On 6/10/07, __ <redshifted@...287...> wrote:
Hello,
I'm trying to plot a simple list of x/y coords over an image (.png). I can
show the image, or plot the data, but cannot find a way to layer one over
the other. I would greatly appreciate someone pointing me in the right
Excellent. Thank you very much!
On 6/10/07, Jake Emerson <jake.emerson@…1306…> wrote:
The python imaging library is pretty good for this kind of thing.
Here’s an (untested) example. Hope it helps.
Jake
#!/usr/bin/env python
from pylab import scatter, save
import Image
#get the background image, and find out how big it is
im_bg = Image.open(“background.png”)
bg_width, bg_height = im.size
#make a white canvas on which to paste the background image and the scatter plot
#this will allow you to, say, have the x- and y-axis values fall outside of the background image’s limits
im_canvas = Image.new(“RGBA”, (bg_width+60, bg_height+60), (255, 255, 255, 0))
#create the scatter plot from x and y data with matplotlib
scatter(x, y, s=sizes, alpha=0.75)
#save the scatter plot, and then retrieve it for use in PIL, convert to RGBA so that alpha levels will work
#there is probably a better way to do this with gcf() or gci()…
savefig(“scatter_plot.png”)
im_scatter = Image.open(“scatter_plot.png”).convert(“RGBA”)
#resize the scatter image to make it fit nice
im_scatter.resize((bg_width+10, bg_height+10))
#bring all of the images together by pasting them onto the white canvas, use the overlayed image as the mask (third element)
im_canvas.paste(im_bg, (30, 30), im_bg) #play around with the paste locations (30, 30)
im_canvas.paste(im_scatter, (10, 30), im_scatter) #these won’t be perfect the first time (10, 30)
#save it
im_canvas.save(“combo_image.png”)
From: __ [mailto:redshifted@…287…]
Sent: Sunday, June 10, 2007 5:22 PM
To: matplotlib-users@lists.sourceforge.net
Subject:
[Matplotlib-users] Simple scatter plot over an image
Hello,
I’m trying to plot a simple list of x/y coords over an image (.png). I can show the image, or plot the data, but cannot find a way to layer one over the other. I would greatly appreciate someone pointing me in the right direction. Thanks.