Skip to content

Commit

Permalink
Tweaks to mplot3d.polys3d_demo example: change the functionality by a…
Browse files Browse the repository at this point in the history
…dding extra zero vertices instead of zeroing out the first and last elements of the random data, plus reorganization/refactoring and comments.
  • Loading branch information
TrishGillett committed Apr 15, 2016
1 parent e552b5e commit 53b088c
Showing 1 changed file with 32 additions and 13 deletions.
45 changes: 32 additions & 13 deletions examples/mplot3d/polys3d_demo.py
@@ -1,35 +1,54 @@
'''
Demonstrate how to create semi-transparent polygons which fill the space
under a line graph, creating a sort of 'jagged stained glass' effect.
'''

from mpl_toolkits.mplot3d import Axes3D
from matplotlib.collections import PolyCollection
from matplotlib.colors import colorConverter
import matplotlib.pyplot as plt
import numpy as np


def cc(arg):
'''
Shorthand to convert 'named' colours to rgba format at 60% opacity.
'''
return colorConverter.to_rgba(arg, alpha=0.6)


def polygon_under_graph(xlist, ylist):
'''
Construct the vertex list which defines the polygon filling the space under
the (xlist, ylist) line graph. Assumes the xs are in ascending order.
'''
return [(xlist[0], 0.)] + list(zip(xlist, ylist)) + [(xlist[-1], 0.)]


fig = plt.figure()
ax = fig.gca(projection='3d')

# Make verts a list, verts[i] will be a list of (x,y) pairs defining polygon i
verts = []

# Set up the x sequence
xs = np.linspace(0., 10., 26)

def cc(arg):
return colorConverter.to_rgba(arg, alpha=0.6)
# The ith polygon will appear on the plane y = zs[i]
zs = range(4)

xs = np.arange(0, 10, 0.4)
verts = []
zs = [0.0, 1.0, 2.0, 3.0]
for z in zs:
for i in zs:
ys = np.random.rand(len(xs))
ys[0], ys[-1] = 0, 0
verts.append(list(zip(xs, ys)))
verts.append(polygon_under_graph(xs, ys))

poly = PolyCollection(verts, facecolors=[cc('r'), cc('g'), cc('b'),
cc('y')])
poly.set_alpha(0.7)
poly = PolyCollection(verts, facecolors=[cc('r'), cc('g'), cc('b'), cc('y')])
ax.add_collection3d(poly, zs=zs, zdir='y')

ax.set_xlabel('X')
ax.set_xlim3d(0, 10)
ax.set_ylabel('Y')
ax.set_ylim3d(-1, 4)
ax.set_zlabel('Z')
ax.set_xlim3d(0, 10)
ax.set_ylim3d(-1, 4)
ax.set_zlim3d(0, 1)

plt.show()

0 comments on commit 53b088c

Please sign in to comment.