python数据处理5

#==============================================================================

# 第5章 创建3D可视化图表 129

# 5.1 简介 129

#==============================================================================

#==============================================================================

# 5.2 创建3D柱状图 129

#==============================================================================

5.2.1 准备工作 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 创建3D直方图 133

#==============================================================================

5.3.1 准备工作 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中创建动画 136

#==============================================================================

5.4.1 准备工作 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 准备工作 140

5.5.2 操作步骤 141

5.5.3 工作原理 142

5.5.4 补充说明 142

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容