
本文为 《Scientific VisualisationPython & Matplotlib》by Nicolas P 一书的学习手记,旨在使用Python &Matplotlib工具进行图表的科学可视化
import scipy
import numpy as np
import matplotlib.pyplot as plt
import sys; print(sys.version)
import matplotlib; print(matplotlib.__version__)
本文使用
- Python 3.7.4
- Numpy 1.16.4
- Scipy 1.3.0
- Matplotlib 3.1.0


The initial goal was to replace the popular Matlab graphics engine and to support different platforms, to have high quality raster and vector output, to provide support for mathematical expressions and to work interactively from the shell.
20年后,Matplotlib 初心不变,一直秉承着最初的设计理念,如今Matplotlib 已经成为Python科学可视化的事实标准了。
一个基本的图表有很多元素组成,而很多时候用户不必关系每一个图表元素,Matplotlib 会为图表设置很多默认值,用户只需要根据自己需求设计即可,比如最简单的一个图表可以表示为:
import matplotlib.pyplot as plt
plt.plot(range(10))
plt.show()

主要元素,详细使用可以参考: 【Matplotlib API使用wiki】
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
fig.subplots_adjust(top=0.8)
ax1 = fig.add_subplot(211)
ax1.set_ylabel('volts')
ax1.set_title('a sine wave')
t = np.arange(0.0, 1.0, 0.01)
s = np.sin(2*np.pi*t)
line, = ax1.plot(t, s, color='blue', lw=2)
# Fixing random state for reproducibility
np.random.seed(999)
ax2 = fig.add_axes([0.15, 0.1, 0.7, 0.3])
n, bins, patches = ax2.hist(np.random.randn(1000), 50,
facecolor='yellow', edgecolor='yellow')
ax2.set_xlabel('time (s)')
plt.show()
ax.set_xscale("log")
ax = plt.subplot(1, 1, 1, projection='polar')
ax = plt.subplot(1, 1, 1, projection='3d')

import matplotlib.font_manager
matplotlib.font_manager._rebuild()
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(-np.pi, np.pi, 256, endpoint=True) C, S = np.cos(X), np.sin(X)
plt.plot(X, C)
plt.plot(X, S)
plt.show()
## 设置 图表样式Style文件
figure.figsize: 6,2.5
figure.edgecolor: black
figure.facecolor: ffffff
axes.linewidth: 1
axes.facecolor: ffffff
axes.ymargin: 0.1
axes.spines.bottom: True
axes.spines.left: True
axes.spines.right: False
axes.spines.top: False
font.sans-serif: Fira Sans Condensed
axes.grid: False
grid.color: black
grid.linewidth: .1
xtick.bottom: True
xtick.top: False
xtick.direction: out
xtick.major.size: 5
xtick.major.width: 1
xtick.minor.size: 3
xtick.minor.width: .5
xtick.minor.visible: True
ytick.left: True
ytick.right: False
ytick.direction: out
ytick.major.size: 5
ytick.major.width: 1
ytick.minor.size: 3
ytick.minor.width: .5
ytick.minor.visible: True
lines.linewidth: 2
lines.markersize: 5
# 直接使用自定义style绘制图表
plt.style.use("./mystyle.txt")
fig = plt.figure(linewidth=1)
ax = plt.subplot(1,1,1,aspect=1)
ax.plot(X, np.cos(X), label="cosine")
ax.plot(X, np.sin(X), label="sine")
ax.legend() // 图例
ax.set_yticks([-1,0,1])
// 直接自定义一些少量的参数
// 刻度和标签
ax.set_yticks([-1,1])
ax.set_xticklabels(["-1", "+1"])
ax.set_xticks([-np.pi, -np.pi/2, np.pi/2, np.pi])
ax.set_xticklabels(["π-", "π-/2", "π+/2", "π+"])
// 隐藏边线
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
//坐标轴的箭头
ax.plot(1, 0, ">k",
transform=ax.get_yaxis_transform(), clip_on=False)
ax.plot(0, 1, "^k",
transform=ax.get_xaxis_transform(), clip_on=False)