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 上找到。


代码下载

点击下载


广而告之