📄 collections.py
字号:
#!/usr/bin/env python'''Demonstration of LineCollection, PolyCollection, andRegularPolyCollection with autoscaling.For the first two subplots, we will use spirals. Theirsize will be set in plot units, not data units. Their positionswill be set in data units by using the "offsets" and "transOffset"kwargs of the LineCollection and PolyCollection.The third subplot will make regular polygons, with the sametype of scaling and positioning as in the first two.The last subplot illustrates the use of "offsets=(xo,yo)",that is, a single tuple instead of a list of tuples, to generatesuccessively offset curves, with the offset given in dataunits. This behavior is available only for the LineCollection.'''import pylab as Pfrom matplotlib import collections, axes, transformsfrom matplotlib.colors import colorConverterimport matplotlib.numerix as Nnverts = 50npts = 100# Make some spiralsr = N.array(range(nverts))theta = N.array(range(nverts)) * (2*N.pi)/(nverts-1)xx = r * N.sin(theta)yy = r * N.cos(theta)spiral = zip(xx,yy)# Make some offsetsxo = P.randn(npts)yo = P.randn(npts)xyo = zip(xo, yo)# Make a list of colors cycling through the rgbcmyk series.colors = [colorConverter.to_rgba(c) for c in ('r','g','b','c','y','m','k')]fig = P.figure()a = fig.add_subplot(2,2,1)col = collections.LineCollection([spiral], offsets=xyo, transOffset=a.transData) # Note: the first argument to the collection initializer # must be a list of sequences of x,y tuples; we have only # one sequence, but we still have to put it in a list.a.add_collection(col, autolim=True) # autolim=True enables autoscaling. For collections with # offsets like this, it is neither efficient nor accurate, # but it is good enough to generate a plot that you can use # as a starting point. If you know beforehand the range of # x and y that you want to show, it is better to set them # explicitly, leave out the autolim kwarg (or set it to False), # and omit the 'a.autoscale_view()' call below.# Make a transform for the line segments such that their size is# given in points:trans = transforms.scale_transform(fig.dpi/transforms.Value(72.), fig.dpi/transforms.Value(72.))col.set_transform(trans) # the points to pixels transformcol.set_color(colors)a.autoscale_view() # See comment above, after a.add_collection.a.set_title('LineCollection using offsets')# The same data as above, but fill the curves.a = fig.add_subplot(2,2,2)col = collections.PolyCollection([spiral], offsets=xyo, transOffset=a.transData)a.add_collection(col, autolim=True)trans = transforms.scale_transform(fig.dpi/transforms.Value(72.), fig.dpi/transforms.Value(72.))col.set_transform(trans) # the points to pixels transformcol.set_color(colors)a.autoscale_view()a.set_title('PolyCollection using offsets')# 7-sided regular polygonsa = fig.add_subplot(2,2,3)col = collections.RegularPolyCollection(fig.dpi, 7, sizes = P.fabs(xx)*10, offsets=xyo, transOffset=a.transData)a.add_collection(col, autolim=True)trans = transforms.scale_transform(fig.dpi/transforms.Value(72.), fig.dpi/transforms.Value(72.))col.set_transform(trans) # the points to pixels transformcol.set_color(colors)a.autoscale_view()a.set_title('RegularPolyCollection using offsets')# Simulate a series of ocean current profiles, successively# offset by 0.1 m/s so that they form what is sometimes called# a "waterfall" plot or a "stagger" plot.a = fig.add_subplot(2,2,4)nverts = 60ncurves = 20offs = (0.1, 0.0)yy = P.linspace(0, 2*N.pi, nverts)ym = P.amax(yy)xx = (0.2 + (ym-yy)/ym)**2 * N.cos(yy-0.4) * 0.5segs = []for i in range(ncurves): xxx = xx + 0.02*P.randn(nverts) curve = zip(xxx, yy*100) segs.append(curve)col = collections.LineCollection(segs, offsets=offs)a.add_collection(col, autolim=True)col.set_color(colors)a.autoscale_view()a.set_title('Successive data offsets')a.set_xlabel('Zonal velocity component (m/s)')a.set_ylabel('Depth (m)')# Reverse the y-axis so depth increases downwarda.set_ylim(a.get_ylim()[::-1])P.show()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -