From: Paul I. <piv...@gm...> - 2011-04-23 01:19:17
|
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, -- Paul Ivanov 314 address only used for lists, off-list direct email at: http://pirsquared.org | GPG/PGP key id: 0x0F3E28F7 |