0. 绘图设置
0.0 导入函数包
import numpy as np
import matplotlib.pyplot as plt
0.1 全局设置
plt.rcParams()
0.2 设置坐标名称与图标题
plt.xlabel('Your X Label Name')
plt.ylabel('Your Y Label Name')
plt.title('Your Figure Title')
0.3 显示图例
plt.plot(loc='best')
0.4 显示栅格
# 显示默认样式
plt.grid(True)
# 显示副刻度线
plt.minorticks_on()
# 分别设置主副栅格样式
plt.grid(b=True, which='major', color='b', linestyle='-')
plt.grid(b=True, which='minor', color='r', linestyle='--')
0.5 对数坐标时设置副刻度线
fig, ax = plt.subplots()
ax.tick_params(axis='both', which='both', direction='in')
ax.xaxis.set_minor_locator(mpl.ticker.AutoMinorLocator(4))
locmaj = mpl.ticker.LogLocator(base=10, numticks=12)
ax.yaxis.set_major_locator(locmaj)
locmin = mpl.ticker.LogLocator(base=10.0, subs=np.arange(0.1, 1, 0.1), numticks=12)
ax.yaxis.set_minor_locator(locmin)
ax.yaxis.set_minor_formatter(mpl.ticker.NullFormatter())
0.6 色谱
如果希望使用反过来的色谱,对于内置的色谱名称,在名称后面直接加上_r
即可
0.7 列出本地所有可选字体
import matplotlib.font_manager
from IPython.core.display import HTML
def make_html(fontname):
return "{font}: {font}
".format(font=fontname)
code = "\n".join([make_html(font) for font in sorted(set([f.name for f in matplotlib.font_manager.fontManager.ttflist]))])
HTML("{}".format(code))
1. 直方图
1.0 统一模型
N_MC = 1000
1, 1 = 500, 200
1, 1 = 2000, 300
x1 = np.random.normal(1, 1, N_MC)
x2 = np.random.normal(2, 2, N_MC)
1.1 设置固定bin宽度
应用场景:需要将两个分布直方图作对比而画在同一坐标系中。
代码:
MIN, MAX = 0, 4096 # 设置最小值、最大值
BIN_WIDTH = 20 # 设置bin宽度
bins = np.arange(MIN, MAX + BIN_WIDTH, BIN_WIDTH) # 生成bin宽等差数列
plt.hist(x1, bins=bins) # 绘制直方图
plt.hist(x2, bins=bins)
1.2 将直方图改为带误差棒的“散点”图
应用场景:多个直方图堆叠时更清晰地可视化。
代码:
BINS = 200
counts, bin_edges = np.histogram(x1, BINS) # 获得每个bin的数据量和bin边界参数
bin_centers = (bin_edges[:-1] + bin_edges[1:]) / 2. # 利用bin边界参数计算bin中心位置
# bin_centers = bin_edges[1:] - BIN_WIDTH / 2 # 在BIN_WIDTH已知时
errs = np.sqrt(counts) # 误差默认取为Possion涨落,可根据实际情况调整
plt.errorbar(bin_centers, counts, yerr=errs, fmt='.') # 绘制有误差棒的“散点”图
如果是要归一化,那么需要有一些调整(考虑到误差棒也需要调整)
counts, bin_edges = np.histogram(x1, BINS) # BINS与上一个代码片段相同
counts_norm, _ = np.histogram(x1, BINS, normed=True) # 额外需要一个归一化的直方图数据
scales = np.divide(counts, counts_norm) # 拿到归一化过程中放缩的尺度系数(每个bin不同)
bin_centers = (bin_edges[:-1] + bin_edges[1:]) / 2.
errs = np.divide(np.sqrt(counts), scales) # 误差棒尺度调整
plt.errorbar(bin_centers, counts_norm, yerr=errs, fmt='.')
持续更新。。。