Thanks, Ryan, this is (amost) exactly what I was looking for. Now, I get the markers and their colors right, but I still have two problems: The markers have a black edges, that I cannot get rid of. I've tried
rect = Rectangle(..., ec=None) and also col.set=edgecolor(None) and 'None', respectively, both with no effect whatsoever. The second problem is, that I cannot get the colorbar to work. I tried sc = ax.add_collection(col) plt.colorbar(sc) and plt.colobar(col) both do not work. Any Ideas how to fix those two issues? Thanks, -Hackstein > Message: 4 > Date: Thu, 25 Apr 2013 19:44:23 -0400 > From: Ryan Nelson <rnelsonc...@gmail.com> > Subject: Re: [Matplotlib-users] Individual custom markers and colorbar > To: matplotlib-users@lists.sourceforge.net > Message-ID: <5179bfd7.7060...@gmail.com> > Content-Type: text/plain; charset="iso-8859-1" > > Hackstein, > > Unfortunately, I'm not sure of an 'elegant' way to do what your asking > with a single call to scatter. Others may know a better way. However, > you can use rectangle patches and patch collections. (Requires a bit > more code than scatter but is ultimately more flexible.) > > I think the example below does what you need, but with random numbers. > > Hope it helps a little. > > Ryan > > ####################### > import numpy as np > import matplotlib.pyplot as plt > from matplotlib.patches import Rectangle > from matplotlib.collections import PatchCollection > > n = 100 > > # Get your xy data points, which are the centers of the rectangles. > xy = np.random.rand(n,2) > > # Set a fixed height > height = 0.02 > # The variable widths of the rectangles > widths = np.random.rand(n)*0.1 > > # Get a color map and color values (normalized between 0 and 1) > cmap = plt.cm.jet > colors = np.random.rand(n) > > rects = [] > for p, w, c in zip(xy, widths, colors): > xpos = p[0] - w/2 # The x position will be half the width from the > center > ypos = p[1] - height/2 # same for the y position, but with height > rect = Rectangle( (xpos, ypos), w, height ) # Create a rectangle > rects.append(rect) # Add the rectangle patch to our list > > # Create a collection from the rectangles > col = PatchCollection(rects) > # set the alpha for all rectangles > col.set_alpha(0.3) > # Set the colors using the colormap > col.set_facecolor( cmap(colors) ) > > # Make a figure and add the collection to the axis. > ax = plt.subplot(111) > ax.add_collection(col) > plt.show() > > ############################### > > > On 4/24/2013 5:35 PM, Hackstein wrote: >> >> Hi all, >> >> I am trying to get a scatter plot using a colormap. Additionally, I >> need to define every marker for every data point individually -- each >> being a rectangle with fixed height but varying width as a function of >> the y-value. X and y being the data coordinates, z being a number to >> be color coded with the colormap. >> >> Ideally, I would like to create a list of width and height values for >> each data point and tell the scatter plot to use those. >> >> So far I got colormapped data with custom markers (simplified): >> >> [code] >> >> import numpy as np >> >> import matplotlib.pyplot as plt >> >> from pylab import * >> >> x = y = [1,2,3,4,5] >> >> z = [2,4,6,8,10] >> >> colors = cm.gnuplot2 >> >> verts_vec = list(zip([-10.,10.,10.,-10.],[-5.,-5.,5.,5.])) >> >> fig = plt.figure(1, figsize=(14.40, 9.00)) >> >> ax = fig.add_subplot(1,1,1) >> >> sc = ax.scatter(x, y, c=np.asarray(z), marker=None, edgecolor='None', >> verts=verts_vec, cmap=colors, alpha=1.) >> >> plt.colorbar(sc, orientation='horizontal') >> >> plt.savefig('test.png', dpi=200) >> >> plt.close(1) >> >> [/code] >> >> But I need to define a marker size for each point, and I also need to >> do that in axis scale values, not in points. >> >> I imagine giving verts a list of N*2 tuples instead of 2 tuples, N >> being len(x), to define N individual markers. >> >> But when doing that I get the error that vertices.ndim==2. >> >> A less elegant way would be to plot every data point in an individual >> scatter plot function, using a for-loop iterating over all data >> points. Then, however, I see no way to apply a colormap and colorbar. >> >> What is the best way to accomplish that then? >> >> Thanks, >> >> -Hackstein >> >> >> >> ------------------------------------------------------------------------------ >> Try New Relic Now & We'll Send You this Cool Shirt >> New Relic is the only SaaS-based application performance monitoring service >> that delivers powerful full stack analytics. Optimize and monitor your >> browser, app, & servers with just a few lines of code. Try New Relic >> and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr >> >> >> _______________________________________________ >> Matplotlib-users mailing list >> Matplotlib-users@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > -------------- next part -------------- > An HTML attachment was scrubbed... > > ------------------------------ > > ------------------------------------------------------------------------------ > Try New Relic Now & We'll Send You this Cool Shirt > New Relic is the only SaaS-based application performance monitoring service > that delivers powerful full stack analytics. Optimize and monitor your > browser, app, & servers with just a few lines of code. Try New Relic > and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr > > ------------------------------ > > _______________________________________________ > Matplotlib-users mailing list > Matplotlib-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > > End of Matplotlib-users Digest, Vol 83, Issue 23 > ************************************************ ------------------------------------------------------------------------------ Try New Relic Now & We'll Send You this Cool Shirt New Relic is the only SaaS-based application performance monitoring service that delivers powerful full stack analytics. Optimize and monitor your browser, app, & servers with just a few lines of code. Try New Relic and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users