#==============================================================================
# 第5章 創(chuàng)建3D可視化圖表 129
# 5.1 簡介 129
#==============================================================================
#==============================================================================
# 5.2 創(chuàng)建3D柱狀圖 129
#==============================================================================
5.2.1 準(zhǔn)備工作 130
5.2.2 操作步驟 130
5.2.3 工作原理 132
5.2.4 補充說明 132
import random
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from mpl_toolkits.mplot3d import Axes3D
mpl.rcParams['font.size'] = 10
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
for z in [2011, 2012, 2013, 2014]:
? ? xs = xrange(1,13)
? ? ys = 1000 * np.random.rand(12)
? ? color = plt.cm.Set2(random.choice(xrange(plt.cm.Set2.N)))
? ? ax.bar(xs, ys, zs=z, zdir='y', color=color, alpha=0.8)
ax.xaxis.set_major_locator(mpl.ticker.FixedLocator(xs))
ax.yaxis.set_major_locator(mpl.ticker.FixedLocator(ys))
ax.set_xlabel('Month')
ax.set_ylabel('Year')
ax.set_zlabel('Sales Net [usd]')
plt.show()
------------------------------------------------
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
import numpy as np
n_angles = 36
n_radii = 8
radii = np.linspace(0.125, 1.0, n_radii)
angles = np.linspace(0, 2 * np.pi, n_angles, endpoint=False)
angles = np.repeat(angles[..., np.newaxis], n_radii, axis=1)
# Convert polar (radii, angles) coords to cartesian (x, y) coords
# (0, 0) is added here. There are no duplicate points in the (x, y) plane
x = np.append(0, (radii * np.cos(angles)).flatten())
y = np.append(0, (radii * np.sin(angles)).flatten())
# Pringle surface
z = np.sin(-x * y)
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_trisurf(x, y, z, cmap=cm.jet, linewidth=0.2)
plt.show()
#==============================================================================
# 5.3 創(chuàng)建3D直方圖 133
#==============================================================================
5.3.1 準(zhǔn)備工作 134
5.3.2 操作步驟 134
5.3.3 工作原理 135
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
mpl.rcParams['font.size'] = 10
x = np.random.normal(5, 1,? 25)
y = np.random.normal(3, .5,? 25)
fig = plt.figure()
ax = fig.add_subplot(211, projection='3d')
hist, xedges, yedges = np.histogram2d(x, y, bins=10)
xpos, ypos = np.meshgrid(xedges[:-1]+.25, yedges[:-1]+.25)
xpos = xpos.flatten()
ypos = ypos.flatten()
zpos = np.zeros((len(xedges) - 1) * (len(yedges) - 1))
dx = .1 * np.ones_like(zpos)
dy = dx.copy()
dz = hist.flatten()
ax.bar3d(xpos, ypos, zpos, dx, dy, dz, color='b', alpha=0.4)
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
ax.set_zlabel('Z Axis')
ax2 = fig.add_subplot(212)
ax2.scatter(x, y)
ax2.set_xlabel('X Axis')
ax2.set_ylabel('Y Axis')
plt.show()
#==============================================================================
# 5.4 在matplotlib中創(chuàng)建動畫 136
#==============================================================================
5.4.1 準(zhǔn)備工作 136
5.4.2 操作步驟 137
5.4.3 工作原理 138
5.4.4 補充說明 139
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)
def init():
? ? line.set_data([], [])
? ? return line,
def animate(i):
? ? x = np.linspace(0, 2, 1000)
? ? y = np.sin(2 * np.pi * (x - 0.01 * i)) * np.cos(22 * np.pi * (x - 0.01 * i))
? ? line.set_data(x, y)
? ? return line,
animator = animation.FuncAnimation(fig, animate, init_func=init, frames=200, interval=20, blit=True)
animator.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264'], writer='ffmpeg_file')
plt.show()
--------------------------------------------------------
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig = plt.figure()
ax = fig.add_subplot(111)
x = np.arange(0, 2*np.pi, 0.01)? ? ? ? # x-array
line, = ax.plot(x, np.sin(x))
def animate(i):
? ? line.set_ydata(np.sin(x+i/10.0))? # update the data
? ? return line,
#Init only required for blitting to give a clean slate.
def init():
? ? line.set_ydata(np.ma.array(x, mask=True))
? ? return line,
ani = animation.FuncAnimation(fig, animate, np.arange(1, 200), init_func=init,
? ? interval=25, blit=True)
plt.show()
#==============================================================================
# 5.5 用OpenGL制作動畫 139
#==============================================================================
5.5.1 準(zhǔn)備工作 140
5.5.2 操作步驟 141
5.5.3 工作原理 142
5.5.4 補充說明 142