On 04/23/2011 03:19 AM, Paul Ivanov wrote:
> Hi Xavier,
>
> Xavier Gnata, on 2011-04-23 02:33, wrote:
>> Imagine you have this code:
>>
>> import numpy as np
>> import matplotlib.cm as cm
>> import matplotlib.mlab as mlab
>> import matplotlib.pyplot as plt
>>
>> delta = 0.25
>> x = y = np.arange(-3.0, 3.0, delta)
>> X, Y = np.meshgrid(x, y)
>> Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
>> Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
>> Z = Z2-Z1 # difference of Gaussians
>>
>> plt.imshow(Z, interpolation='nearest', cmap=cm.gray, origin='lower', extent=[-3,3,-3,3])
>> Then you want to change the color of a few pixels to red.
>> You have a list of coordinates (i,j) and each pixel in this list should
>> now be red.
>>
>> I could play with masked arrays like in:
>> http://matplotlib.sourceforge.net/examples/pylab_examples/image_masked.html
>> but I would prefer a simple "display this pixel (i,j) in red whatever
>> his value is" function.
> Since you're using a gray color map for that image, you won't be
> able to set a particular pixel to red. You'll have to either
> overlay a new image that would be masked out everywhere except
> for the pixels you want to change, as you mentioned, or create
> new image patches at the corresponding positions like this:
>
> idx2im = lambda i,j: (x[i],x[j+1],y[i],y[j+1] )
> plt.imshow([[.9]], extent=idx2im(12,12), cmap =cm.jet, origin='lower',vmin=0,vmax=1)
>
> or something like this:
>
> plt.Rectangle((x[10],y[10]),width=delta,height=delta,color='red')
> ax = plt.gca()
> ax.add_artist(r)
> plt.draw()
>
>
> best,
Thanks. The code using "Rectangle" works very well.
Using masks is more efficient but overshoot if I want to change only a
few pixels.
Xavier
|