Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Tweaks to mplot3d.polys3d_demo example: change the functionality by a…
…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
1 parent
bf8f171
commit d86994e
Showing
1 changed file
with
32 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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() |