Python: 【Python实现数据可视化】创建3D柱状图
May 26, 2015
虽然matplotlib主要专注于绘图,并且主要是二维的图形,但是它也有一些不同的扩展,能让我们在地理图上绘图,让我们把Excel和3D图表结合起来。在matplotlib的世界里,这些扩展叫做工具包(toolkits)。工具包是一些关注在某个话题(如3D绘图)的特定函数的集合。
比较流行的工具包有Basemap、GTK 工具、Excel工具、Natgrid、AxesGrid和mplot3d。
本节将探索关于mplot3d的更多功能。
Table of Contents
准备工作
基本来讲,我们仍然需要创建一个图表并把想要的坐标轴添加到上面。但不同的是我们为图表指定的是3D视图,并且添加的坐标轴是 Axes3D。
现在,我们可以使用几乎相同的函数来绘图了。当然,函数的参数是不同的,需要为3个坐标轴提供数据。
例如,我们要为函数
1.
2.zs:这是z轴的坐标值,可以是所有点对应一个值,或者是每个点对应一个值。
3.
提示:模块
操作步骤
以下代码演示了我们所解释的概念。
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()
上述代码生成如图5-1所示的图表。
工作原理
我们需要像在2D世界中那样做相同的准备工作。不同的是,在这里需要指定后端(backend)的种类。然后生成了一些随机数据,例如4年的销售额(2011-2014)。
我们需要为3D坐标轴指定相同的Z值。
从颜色映射集合中随机选择一种颜色,然后把它和每一个Z-order集合的
补充说明
其他的一些matplotlib的2D绘图函数在这里也是可以用的,例如
仅在3D中出现的新图表类型有线框图(wireframe)、曲面图(surface)和三翼面图(tri-surface)。
在下面的示例代码中,我们绘制了著名的Pringle函数的三翼面图,数学专业上的叫法是双曲面抛物线(hyperbolic paraboloid)。
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 # An array of radii # Does not include radius r=0, this is to eliminate duplicate points radii = np.linspace(0.125, 1.0, n_radii) # An array of angles angles = np.linspace(0, 2 * np.pi, n_angles, endpoint=False) # Repeat all angles for each radius 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-2所示的图形。
本文摘自《Python数据可视化编程实战》
Python数据可视化编程实战
内容简介:
本书是一本使用Python实现数据可视化编程的实战指南,介绍了如何使用Python最流行的库,通过60余种方法创建美观的数据可视化效果。
全书共8章,分别介绍了准备工作环境、了解数据、绘制并定制化图表、学习更多图表和定制化、创建3D可视化图表、用图像和地图绘制图表、使用正确的图表理解数据以及更多的matplotlib知识。
本书适合那些对Python编程有一定基础的开发人员阅读,可以帮助读者从头开始了解数据、数据格式、数据可视化,并学会使用Python可视化数据。
0 Comments