Python 科学可视化领域是巨大的,由无数工具组成,从最通用和最广泛使用的工具到更专业和机密的工具。其中一些工具是基于社区的,而另一些则是由公司开发的。有些是专门为 Web 制作的,有些仅适用于桌面,有些处理 3D 和大数据,而有些则针对完美的 2D 渲染。
在这个图景中,Matplotlib 有着非常特别的地方。
- 它是一个多功能且功能强大的库,可让您设计非常高质量的图形,适用于科学出版。
- 它还提供了一个简单直观的界面以及一个面向对象的架构,允许您调整图形中的任何内容。
- 最后,它可以用作常规图形库以设计非科学图形。
本书章节四个部分
-
第一部分 Matplotlib 库的基本原理。
这包括回顾构成图形的不同部分、不同的坐标系、可用的比例和投影,我们还将介绍一些与排版和颜色相关的概念。
-
第二部分 图形涉及实践。
在介绍了一些生成更好图形的简单规则之后,我们将继续解释 Matplotlib 默认值和样式系统,然后再深入研究图形布局组织。然后我们将探索可用的不同类型的情节,看看如何用不同的元素装饰一个人物。
-
第三部分 更高级的概念
即 3D 图形、优化和动画。第四部分也是最后一部分是展示集合。
美图展览
案例代码
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.textpath import TextPath
from matplotlib.patches import PathPatch
from matplotlib.collections import PolyCollection
from matplotlib.font_manager import FontProperties
from matplotlib import font_manager as fm, rcParams
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
#更改字体,支持中文。
prop = FontProperties(fname='fonts/Alibaba-PuHuiTi-Bold.otf', weight=100)
red = np.array([233, 77, 85, 255]) / 255
darkred = np.array([130, 60, 71, 255]) / 255
fig = plt.figure(figsize=(14.8 / 2.54, 21 / 2.54))
ax = fig.add_axes([0, 0, 1, 1], aspect=1, xlim=[-10, 10], ylim=[-14.2, 14.2])
ax.axis("off")
# Text path
path = TextPath((0, 0), "MATPLOTLIB库", size=2, prop=prop)
# Text centering
V = path.vertices
xmin, xmax = V[:, 0].min(), V[:, 0].max()
ymin, ymax = V[:, 1].min(), V[:, 1].max()
V -= (xmin + xmax) / 2 + 1, (ymin + ymax) / 2
# Compute shadow by iterating over text path segments
polys = []
for (point, code) in path.iter_segments(curves=False):
if code == path.MOVETO:
points = [point]
elif code == path.LINETO:
points.append(point)
elif code == path.CLOSEPOLY:
points.append(points[0])
points = np.array(points)
for i in range(len(points) - 1):
p0, p1 = points[i], points[i + 1]
polys.append([p0, p1, p1 + (+20, -20), p0 + (+20, -20)])
# Display shadow
collection = PolyCollection(
polys, closed=True, linewidth=0.0, facecolor=darkred, zorder=-10
)
ax.add_collection(collection)
# Display text
patch = PathPatch(path, facecolor="white", edgecolor="none", zorder=10)
ax.add_artist(patch)
# Transparent gradient to fade out shadow
I = np.zeros((200, 1, 4)) + red
ax.imshow(I, extent=[-11, 11, -15, 15], zorder=-20, clip_on=False)
I[:, 0, 3] = np.linspace(0, 1, len(I))
ax.imshow(I, extent=[-11, 11, -15, 15], zorder=0, clip_on=False)
ax.text(
6.5,
-1.75,
"一个多功能的科学可视化库",
color="white",
ha="right",
va="baseline",
size=10,
#family="Pacifico",
zorder=30,
fontproperties=prop
)
# Save and show result
plt.savefig("text-shadow.pdf")
plt.savefig("text-shadow.png", dpi=600)
plt.show()
电子书下载
您可以阅读 PDF(95Mo,首选站点)这本书,该书是开放访问的,托管在 HAL 上,HAL 是一个面向学术界的法国开放档案馆。最新版本也可以在 GitHub 上找到。本书的来源(包括代码示例)可在 github.com/rougier/scientific-visualization-book 上找到。