介�
Matplotlib å�¯èƒ½æ˜¯ Python 2D-绘图领域使用最广泛的套件。它能让使用者很轻æ�¾åœ°å°†æ•°æ�®å›¾å½¢åŒ–,并且æ��ä¾›å¤šæ ·åŒ–çš„è¾“å‡ºæ ¼å¼�。这里将会探索 matplotlib 的常è§�用法。
IPython 以� pylab 模�
IPython 是 Python 的一个增强版本。它在下列方é�¢æœ‰æ‰€å¢žå¼ºï¼šå‘½å��输入输出ã€�使用系统命令(shell commands)ã€�排错(debug)能力。我们在命令行终端给 IPython åŠ ä¸Šå�‚æ•° -pylab (0.12 以å�Žçš„版本是 --pylab)之å�Žï¼Œå°±å�¯ä»¥åƒ� Matlab 或者 Mathematica é‚£æ ·ä»¥äº¤äº’çš„æ–¹å¼�绘图。
pylab
pylab 是 matplotlib é�¢å�‘对象绘图库的一个接å�£ã€‚å®ƒçš„è¯æ³•å’Œ Matlab å��分相近。也就是说,它主è¦�的绘图命令和 Matlab 对应的命令有相似的å�‚数。
æœ¬ç¯‡æ–‡ç« ä½¿ç”¨çš„å®žä¾‹æº�ç �下载:
下载包包�两个目录:
- figuresï¼šå˜æ”¾å®žä¾‹ä»£ç �生æˆ�的图片
- scriptsï¼šå˜æ”¾å®žä¾‹ä»£ç �
�级绘制
这一节ä¸ï¼Œæˆ‘们将从简到ç¹�:先å°�试用默认é…�置在å�Œä¸€å¼ 图上绘制æ£å¼¦å’Œä½™å¼¦å‡½æ•°å›¾åƒ�,然å�Žé€�æ¥ç¾ŽåŒ–它。
第一æ¥ï¼Œæ˜¯å�–å¾—æ£å¼¦å‡½æ•°å’Œä½™å¼¦å‡½æ•°çš„值:
from pylab import * X = np.linspace(-np.pi, np.pi, 256,endpoint=True) C,S = np.cos(X), np.sin(X)
X 是一个 numpy 数组,包å�«äº†ä»Ž −π 到 +Ï€ ç‰é—´éš”çš„ 256 个值。C å’Œ S 则分别是这 256 个值对应的余弦和æ£å¼¦å‡½æ•°å€¼ç»„æˆ�çš„ numpy 数组。
ä½ å�¯ä»¥åœ¨ IPython 的交互模å¼�下测试代ç �,也å�¯ä»¥ä¸‹è½½ä»£ç �(下载链接就是这些示例图),然å�Žæ‰§è¡Œï¼š
python exercise_1.py
使用默认é…�ç½®[æº�ç �文件]
Matplotlib 的默认é…�置都å…�è®¸ç”¨æˆ·è‡ªå®šä¹‰ã€‚ä½ å�¯ä»¥è°ƒæ•´å¤§å¤šæ•°çš„默认é…�置:图片大å°�和分辨率(dpi)ã€�线宽ã€�颜色ã€�é£Žæ ¼ã€�å��æ ‡è½´ã€�å��æ ‡è½´ä»¥å�Šç½‘æ ¼çš„å±žæ€§ã€�æ–‡å—与å—体属性ç‰ã€‚ä¸�过,matplotlib 的默认é…�置在大多数情况下已ç»�å�šå¾—è¶³å¤Ÿå¥½ï¼Œä½ å�¯èƒ½å�ªåœ¨å¾ˆå°‘的情况下æ‰�会想更改这些默认é…�置。
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()
默认é…�置的具体内容[æº�ç �文件]
下é�¢çš„代ç �ä¸ï¼Œæˆ‘们展现了 matplotlib 的默认é…�置并辅以注释说明,这部分é…�置包å�«äº†æœ‰å…³ç»˜å›¾æ ·å¼�的所有é…�置。代ç �ä¸çš„é…�置与默认é…�置完全相å�Œï¼Œä½ å�¯ä»¥åœ¨äº¤äº’模å¼�ä¸ä¿®æ”¹å…¶ä¸çš„值æ�¥è§‚察效果。
# 导入 matplotlib 的所有内容(nympy å�¯ä»¥ç”¨ np 这个å��å—æ�¥ä½¿ç”¨ï¼‰
from pylab import *
# 创建一个 8 * 6 点(point)的图,并设置分辨率为 80
figure(figsize=(8,6), dpi=80)
# 创建一个新的 1 * 1 çš„å�图,接下æ�¥çš„å›¾æ ·ç»˜åˆ¶åœ¨å…¶ä¸çš„第 1 å�—(也是唯一的一å�—)
subplot(1,1,1)
X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)
# 绘制余弦曲线,使用è“�色的ã€�连ç»çš„ã€�宽度为 1 (åƒ�ç´ ï¼‰çš„çº¿æ�¡
plot(X, C, color="blue", linewidth=1.0, linestyle="-")
# 绘制æ£å¼¦æ›²çº¿ï¼Œä½¿ç”¨ç»¿è‰²çš„ã€�连ç»çš„ã€�宽度为 1 (åƒ�ç´ ï¼‰çš„çº¿æ�¡
plot(X, S, color="green", linewidth=1.0, linestyle="-")
# 设置横轴的上下�
xlim(-4.0,4.0)
# 设置横轴记�
xticks(np.linspace(-4,4,9,endpoint=True))
# 设置纵轴的上下�
ylim(-1.0,1.0)
# 设置纵轴记�
yticks(np.linspace(-1,1,5,endpoint=True))
# 以分辨率 72 æ�¥ä¿�å˜å›¾ç‰‡
# savefig("exercice_2.png",dpi=72)
# 在�幕上显示
show()
改å�˜çº¿æ�¡çš„颜色和粗细[æº�ç �文件]
首先,我们以è“�色和红色分别表示余弦和æ£å¼¦å‡½æ•°ï¼Œè€Œå�Žå°†çº¿æ�¡å�˜ç²—一点。接下æ�¥ï¼Œæˆ‘们在水平方å�‘拉伸一下整个图。
... figure(figsize=(10,6), dpi=80) plot(X, C, color="blue", linewidth=2.5, linestyle="-") plot(X, S, color="red", linewidth=2.5, linestyle="-") ...
设置图片边界[æº�ç �文件]
当�的图片边界设置得�好,所以有些地方看得�是很清楚。
... xlim(X.min()*1.1, X.max()*1.1) ylim(C.min()*1.1, C.max()*1.1) ...更好的方å¼�æ˜¯è¿™æ ·ï¼š
xmin ,xmax = X.min(), X.max() ymin, ymax = Y.min(), Y.max() dx = (xmax - xmin) * 0.2 dy = (ymax - ymin) * 0.2 xlim(xmin - dx, xmax + dx) ylim(ymin - dy, ymax + dy)
设置记å�·[æº�ç �文件]
我们讨论æ£å¼¦å’Œä½™å¼¦å‡½æ•°çš„æ—¶å€™ï¼Œé€šå¸¸å¸Œæœ›çŸ¥é�“函数在 ±π å’Œ ±π2 çš„å€¼ã€‚è¿™æ ·çœ‹æ�¥ï¼Œå½“å‰�的设置就ä¸�那么ç�†æƒ³äº†ã€‚
...xticks( [-np.pi, -np.pi/2, 0, np.pi/2, np.pi]) yticks([-1, 0, +1]) ...

设置记å�·çš„æ ‡ç¾[æº�ç �文件]
è®°å�·çŽ°åœ¨æ²¡é—®é¢˜äº†ï¼Œä¸�è¿‡æ ‡ç¾å�´ä¸�大符å�ˆæœŸæœ›ã€‚我们å�¯ä»¥æŠŠ 3.142 当å�šæ˜¯ π,但毕竟ä¸�够精确。当我们设置记å�·çš„æ—¶å€™ï¼Œæˆ‘们å�¯ä»¥å�Œæ—¶è®¾ç½®è®°å�·çš„æ ‡ç¾ã€‚注æ„�这里使用了 LaTeX。
...
xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
[r'$-\pi$', r'$-\pi/2$', r'$0$', r'$+\pi/2$', r'$+\pi$'])
yticks([-1, 0, +1],
[r'$-1$', r'$0$', r'$+1$'])
...
移动脊柱[æº�ç �文件]
å��æ ‡è½´çº¿å’Œä¸Šé�¢çš„è®°å�·è¿žåœ¨ä¸€èµ·å°±å½¢æˆ�了脊柱(Spines,一æ�¡çº¿æ®µä¸Šæœ‰ä¸€ç³»åˆ—的凸起,是ä¸�是很åƒ�脊柱骨啊~),它记录了数æ�®åŒºåŸŸçš„范围。它们å�¯ä»¥æ”¾åœ¨ä»»æ„�ä½�置,ä¸�过至今为æ¢ï¼Œæˆ‘们都把它放在图的四边。
实际上æ¯�幅图有四æ�¡è„ŠæŸ±ï¼ˆä¸Šä¸‹å·¦å�³ï¼‰ï¼Œä¸ºäº†å°†è„ŠæŸ±æ”¾åœ¨å›¾çš„ä¸é—´ï¼Œæˆ‘们必须将其ä¸çš„两æ�¡ï¼ˆä¸Šå’Œå�³ï¼‰è®¾ç½®ä¸ºæ— 色,然å�Žè°ƒæ•´å‰©ä¸‹çš„两æ�¡åˆ°å�ˆé€‚çš„ä½�置——数æ�®ç©ºé—´çš„ 0 点。
...
ax = gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
...

æ·»åŠ å›¾ä¾‹[æº�ç �文件]
æˆ‘ä»¬åœ¨å›¾çš„å·¦ä¸Šè§’æ·»åŠ ä¸€ä¸ªå›¾ä¾‹ã€‚ä¸ºæ¤ï¼Œæˆ‘们å�ªéœ€è¦�在 plot 函数里以「键 - 值ã€�的形å¼�å¢žåŠ ä¸€ä¸ªå�‚数。
... plot(X, C, color="blue", linewidth=2.5, linestyle="-", label="cosine") plot(X, S, color="red", linewidth=2.5, linestyle="-", label="sine") legend(loc='upper left') ...

给一些特殊点å�šæ³¨é‡Š[æº�ç �文件]
我们希望在 2Ï€/3 çš„ä½�置给两æ�¡å‡½æ•°æ›²çº¿åŠ ä¸Šä¸€ä¸ªæ³¨é‡Šã€‚é¦–å…ˆï¼Œæˆ‘ä»¬åœ¨å¯¹åº”çš„å‡½æ•°å›¾åƒ�ä½�置上画一个点;然å�Žï¼Œå�‘横轴引一æ�¡åž‚çº¿ï¼Œä»¥è™šçº¿æ ‡è®°ï¼›æœ€å�Žï¼Œå†™ä¸Šæ ‡ç¾ã€‚
...
t = 2*np.pi/3
plot([t,t],[0,np.cos(t)], color ='blue', linewidth=2.5, linestyle="--")
scatter([t,],[np.cos(t),], 50, color ='blue')
annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',
xy=(t, np.sin(t)), xycoords='data',
xytext=(+10, +30), textcoords='offset points', fontsize=16,
arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
plot([t,t],[0,np.sin(t)], color ='red', linewidth=2.5, linestyle="--")
scatter([t,],[np.sin(t),], 50, color ='red')
annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
xy=(t, np.cos(t)), xycoords='data',
xytext=(-90, -50), textcoords='offset points', fontsize=16,
arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.2"))
...

精益求精[æº�ç �文件]
å��æ ‡è½´ä¸Šçš„è®°å�·æ ‡ç¾è¢«æ›²çº¿æŒ¡ä½�了,作为强迫症患者(雾)这是ä¸�能å¿�的。我们å�¯ä»¥æŠŠå®ƒä»¬æ”¾å¤§ï¼Œç„¶å�Žæ·»åŠ ä¸€ä¸ªç™½è‰²çš„å�Šé€�æ˜Žåº•è‰²ã€‚è¿™æ ·å�¯ä»¥ä¿�è¯�æ ‡ç¾å’Œæ›²çº¿å�Œæ—¶å�¯è§�。
...
for label in ax.get_xticklabels() + ax.get_yticklabels():
label.set_fontsize(16)
label.set_bbox(dict(facecolor='white', edgecolor='None', alpha=0.65 ))
...
图åƒ�ã€�å�图ã€�å��æ ‡è½´å’Œè®°å�·
到目å‰�为æ¢ï¼Œæˆ‘们都用éš�å¼�的方法æ�¥ç»˜åˆ¶å›¾åƒ�å’Œå��æ ‡è½´ã€‚å¿«é€Ÿç»˜å›¾ä¸ï¼Œè¿™æ˜¯å¾ˆæ–¹ä¾¿çš„。我们也å�¯ä»¥æ˜¾å¼�地控制图åƒ�ã€�å�图ã€�å��æ ‡è½´ã€‚Matplotlib ä¸çš„「图åƒ�ã€�指的是用户界é�¢çœ‹åˆ°çš„æ•´ä¸ªçª—å�£å†…容。在图åƒ�里é�¢æœ‰æ‰€è°“「å�图ã€�。å�图的ä½�置是由å��æ ‡ç½‘æ ¼ç¡®å®šçš„ï¼Œè€Œã€Œå��æ ‡è½´ã€�å�´ä¸�å�—æ¤é™�制,å�¯ä»¥æ”¾åœ¨å›¾åƒ�的任æ„�ä½�置。我们已ç»�éš�å¼�地使用过图åƒ�å’Œå�图:当我们调用 plot 函数的时候,matplotlib 调用 gca() 函数以å�Š gcf() 函数æ�¥èŽ·å�–当å‰�çš„å��æ ‡è½´å’Œå›¾åƒ�ï¼›å¦‚æžœæ— æ³•èŽ·å�–图åƒ�,则会调用 figure() 函数æ�¥åˆ›å»ºä¸€ä¸ªâ€”â€”ä¸¥æ ¼åœ°è¯´ï¼Œæ˜¯ç”¨ subplot(1,1,1) 创建一个å�ªæœ‰ä¸€ä¸ªå�图的图åƒ�。
图�
所谓「图åƒ�ã€�就是 GUI 里以「Figure #ã€�ä¸ºæ ‡é¢˜çš„é‚£äº›çª—å�£ã€‚图åƒ�ç¼–å�·ä»Ž 1 开始,与 MATLAB çš„é£Žæ ¼ä¸€è‡´ï¼Œè€ŒäºŽ Python 从 0 开始编å�·çš„é£Žæ ¼ä¸�å�Œã€‚以下å�‚数是图åƒ�的属性:
| �数 | 默认值 | �述 |
|---|---|---|
| num | 1 | 图�的数� |
| figsize | figure.figsize | 图�的长和宽(英寸) |
| dpi | figure.dpi | 分辨率(点/英寸) |
| facecolor | figure.facecolor | 绘图区域的背景颜色 |
| edgecolor | figure.edgecolor | 绘图区域边缘的颜色 |
| frameon | True | 是�绘制图�边缘 |
这些默认值å�¯ä»¥åœ¨æº�æ–‡ä»¶ä¸æŒ‡æ˜Žã€‚ä¸�过除了图åƒ�æ•°é‡�这个å�‚数,其余的å�‚数都很少修改。
ä½ åœ¨å›¾å½¢ç•Œé�¢ä¸å�¯ä»¥æŒ‰ä¸‹å�³ä¸Šè§’çš„ X æ�¥å…³é—窗å�£ï¼ˆOS X 系统是左上角)。Matplotlib 也æ��供了å��为 close 的函数æ�¥å…³é—这个窗å�£ã€‚close 函数的具体行为å�–å†³äºŽä½ æ��供的å�‚数:
- ä¸�ä¼ é€’å�‚数:关é—当å‰�窗å�£ï¼›
- ä¼ é€’çª—å�£ç¼–å�·æˆ–窗å�£å®žä¾‹ï¼ˆinstance)作为å�‚æ•°ï¼šå…³é—æŒ‡å®šçš„窗å�£ï¼›
allï¼šå…³é—æ‰€æœ‰çª—å�£ã€‚
å’Œå…¶ä»–å¯¹è±¡ä¸€æ ·ï¼Œä½ å�¯ä»¥ä½¿ç”¨ setp 或者是 set_something è¿™æ ·çš„æ–¹æ³•æ�¥è®¾ç½®å›¾åƒ�的属性。
å�图
ä½ å�¯ä»¥ç”¨å�图æ�¥å°†å›¾æ ·ï¼ˆplot)放在å�‡åŒ€çš„å��æ ‡ç½‘æ ¼ä¸ã€‚用 subplot å‡½æ•°çš„æ—¶å€™ï¼Œä½ éœ€è¦�æŒ‡æ˜Žç½‘æ ¼çš„è¡Œåˆ—æ•°é‡�,以å�Šä½ å¸Œæœ›å°†å›¾æ ·æ”¾åœ¨å“ªä¸€ä¸ªç½‘æ ¼åŒºåŸŸä¸ã€‚æ¤å¤–,gridspec çš„åŠŸèƒ½æ›´å¼ºå¤§ï¼Œä½ ä¹Ÿå�¯ä»¥é€‰æ‹©å®ƒæ�¥å®žçŽ°è¿™ä¸ªåŠŸèƒ½ã€‚
å��æ ‡è½´
å��æ ‡è½´å’Œå�图功能类似,ä¸�过它å�¯ä»¥æ”¾åœ¨å›¾åƒ�的任æ„�ä½�ç½®ã€‚å› æ¤ï¼Œå¦‚æžœä½ å¸Œæœ›åœ¨ä¸€å‰¯å›¾ä¸ç»˜åˆ¶ä¸€ä¸ªå°�图,就å�¯ä»¥ç”¨è¿™ä¸ªåŠŸèƒ½ã€‚

记�
良好的记å�·æ˜¯å›¾åƒ�çš„é‡�è¦�组æˆ�部分。Matplotlib 里的记å�·ç³»ç»Ÿé‡Œçš„å�„个细节都是å�¯ä»¥ç”±ç”¨æˆ·ä¸ªæ€§åŒ–é…�ç½®çš„ã€‚ä½ å�¯ä»¥ç”¨ Tick Locators æ�¥æŒ‡å®šåœ¨é‚£äº›ä½�置放置记å�·ï¼Œç”¨ Tick Formatters æ�¥è°ƒæ•´è®°å�·çš„æ ·å¼�。主è¦�和次è¦�的记å�·å�¯ä»¥ä»¥ä¸�å�Œçš„æ–¹å¼�呈现。默认情况下,æ¯�一个次è¦�的记å�·éƒ½æ˜¯éš�è—�的,也就是说,默认情况下的次è¦�è®°å�·åˆ—表是空的——NullLocator。
Tick Locators
下�有为��需求设计的一些 Locators。
| 类型 | 说明 |
|---|---|
| NullLocator | No ticks. |
| IndexLocator | Place a tick on every multiple of some base number of points plotted.
|
| FixedLocator | Tick locations are fixed.
|
| LinearLocator | Determine the tick locations.
|
| MultipleLocator | Set a tick on every integer that is multiple of some base.
|
| AutoLocator | Select no more than n intervals at nice locations.
|
| LogLocator | Determine the tick locations for log axes.
|
这些 Locators 都是 matplotlib.ticker.Locator çš„å�ç±»ï¼Œä½ å�¯ä»¥æ�®æ¤å®šä¹‰è‡ªå·±çš„ Locator。以日期为 ticks 特别å¤�æ�‚ï¼Œå› æ¤ Matplotlib æ��供了 matplotlib.dates æ�¥å®žçŽ°è¿™ä¸€åŠŸèƒ½ã€‚
其他类型的图
接下æ�¥çš„å†…å®¹æ˜¯ç»ƒä¹ ã€‚è¯·è¿�ç”¨ä½ å¦åˆ°çš„知识,从æ��供的代ç �开始,实现é…�å›¾æ‰€ç¤ºçš„æ•ˆæžœã€‚å…·ä½“çš„ç”æ¡ˆå�¯ä»¥ç‚¹å‡»é…�图下载。
普通图[æº�ç �文件]
from pylab import * n = 256 X = np.linspace(-np.pi,np.pi,n,endpoint=True) Y = np.sin(2*X) plot (X, Y+1, color='blue', alpha=1.00) plot (X, Y-1, color='blue', alpha=1.00) show()
散点图[æº�ç �文件]
from pylab import * n = 1024 X = np.random.normal(0,1,n) Y = np.random.normal(0,1,n) scatter(X,Y) show()
æ�¡å½¢å›¾[æº�ç �文件]
from pylab import *
n = 12
X = np.arange(n)
Y1 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)
Y2 = (1-X/float(n)) * np.random.uniform(0.5,1.0,n)
bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
bar(X, -Y2, facecolor='#ff9999', edgecolor='white')
for x,y in zip(X,Y1):
text(x+0.4, y+0.05, '%.2f' % y, ha='center', va= 'bottom')
ylim(-1.25,+1.25)
show()
ç‰é«˜çº¿å›¾[æº�ç �文件]
from pylab import * def f(x,y): return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2) n = 256 x = np.linspace(-3,3,n) y = np.linspace(-3,3,n) X,Y = np.meshgrid(x,y) contourf(X, Y, f(X,Y), 8, alpha=.75, cmap='jet') C = contour(X, Y, f(X,Y), 8, colors='black', linewidth=.5) show()
ç�°åº¦å›¾ï¼ˆImshow)[æº�ç �文件]
from pylab import * def f(x,y): return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2) n = 10 x = np.linspace(-3,3,4*n) y = np.linspace(-3,3,3*n) X,Y = np.meshgrid(x,y) imshow(f(X,Y)), show()
饼状图[æº�ç �文件]
from pylab import * n = 20 Z = np.random.uniform(0,1,n) pie(Z), show()
é‡�场图(Quiver Plots)[æº�ç �文件]
from pylab import * n = 8 X,Y = np.mgrid[0:n,0:n] quiver(X,Y), show()
ç½‘æ ¼[æº�ç �文件]
from pylab import * axes = gca() axes.set_xlim(0,4) axes.set_ylim(0,3) axes.set_xticklabels([]) axes.set_yticklabels([]) show()
多é‡�ç½‘æ ¼[æº�ç �文件]
from pylab import * subplot(2,2,1) subplot(2,2,3) subplot(2,2,4) show()
æž�轴图[æº�ç �文件]
from pylab import *
axes([0,0,1,1])
N = 20
theta = np.arange(0.0, 2*np.pi, 2*np.pi/N)
radii = 10*np.random.rand(N)
width = np.pi/4*np.random.rand(N)
bars = bar(theta, radii, width=width, bottom=0.0)
for r,bar in zip(radii, bars):
bar.set_facecolor( cm.jet(r/10.))
bar.set_alpha(0.5)
show()
3D 图[æº�ç �文件]
from pylab import * from mpl_toolkits.mplot3d import Axes3D fig = figure() ax = Axes3D(fig) X = np.arange(-4, 4, 0.25) Y = np.arange(-4, 4, 0.25) X, Y = np.meshgrid(X, Y) R = np.sqrt(X**2 + Y**2) Z = np.sin(R) ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='hot') show()
手稿图[æº�ç �文件]
import numpy as np
import matplotlib.pyplot as plt
eqs = []
eqs.append((r"$W^{3\beta}_{\delta_1 \rho_1 \sigma_2} = U^{3\beta}_{\delta_1 \rho_1} + \frac{1}{8 \pi 2} \int^{\alpha_2}_{\alpha_2} d \alpha^\prime_2 \left[\frac{ U^{2\beta}_{\delta_1 \rho_1} - \alpha^\prime_2U^{1\beta}_{\rho_1 \sigma_2} }{U^{0\beta}_{\rho_1 \sigma_2}}\right]$"))
eqs.append((r"$\frac{d\rho}{d t} + \rho \vec{v}\cdot\nabla\vec{v} = -\nabla p + \mu\nabla^2 \vec{v} + \rho \vec{g}$"))
eqs.append((r"$\int_{-\infty}^\infty e^{-x^2}dx=\sqrt{\pi}$"))
eqs.append((r"$E = mc^2 = \sqrt{{m_0}^2c^4 + p^2c^2}$"))
eqs.append((r"$F_G = G\frac{m_1m_2}{r^2}$"))
plt.axes([0.025,0.025,0.95,0.95])
for i in range(24):
index = np.random.randint(0,len(eqs))
eq = eqs[index]
size = np.random.uniform(12,32)
x,y = np.random.uniform(0,1,2)
alpha = np.random.uniform(0.25,.75)
plt.text(x, y, eq, ha='center', va='center', color="#11557c", alpha=alpha,
transform=plt.gca().transAxes, fontsize=size, clip_on=True)
plt.xticks([]), plt.yticks([])
# savefig('../figures/text_ex.png',dpi=48)
plt.show()更多�考
入门教程
Matplotlib 文档
Numpy 文档
原文:http://www.loria.fr/~rougier/teaching/matplotlib/
译文:http://liam0205.me/2014/09/11/matplotlib-tutorial-zh-cn/
点我分享笔记