1. 繪制一個二維隨機漫步的圖形
直接上代碼:
%pylab inline
nsteps = 1000
draws = np.random.randint(-1,2,size=(2,nsteps))
walks = draws.cumsum(1)
plot(walks[0,:],walks[1,:]);
Populating the interactive namespace from numpy and matplotlib

先生成 1000 個隨機漫步方向,方向是從 {-1, 0, 1} 中隨機挑兩個值(兩個值也可相等)作為移動方向,所以每次移動有 3×3=9 種選擇,初始位置也是 9 種選擇,cumsum 函數是將每次的移動累加,最后通過 plot 畫出來。
2. 畫出一個二次函數,同時畫出梯形法求積分時的各個梯形
這里使用 IPython.html.widgets 模塊中的 interact 函數,繪制一個交互式的函數圖形。可以手動調整梯形個數,看到函數面積隨梯形個數而變化。
def Quadratic(x): # 定義二次函數
return 2*x**2 +3*x +4
import numpy as np
import matplotlib.pyplot as plt
from IPython.html.widgets import interact
def plot_ladder(laddernum):
x = np.linspace(-5, 5, num=100)
y = Quadratic(x)
plot(x,y) # 先畫出原函數的圖形
a = np.linspace(-5, 5, num=laddernum)
for i in range(laddernum):
plot([a[i],a[i]],[0,Quadratic(a[i])],color="black") # 畫梯形的上底和下底
ladders = [];
for i in range(laddernum):
ladders.append([a[i],Quadratic(a[i])]) # 因為梯形的腰是呈一條直線,所以這里存下各點坐標
npladders = np.array(ladders)
plot(npladders[:,0],npladders[:,1]); # 把梯形的斜腰連起來
interact(plot_ladder, laddernum=(1, 30, 1)) # 滑動模塊在 1 和 30 之間變化,變化區間是 1

3. 研究 IPython.html.widgets 模塊中的 interact 函數,繪制一個交互式的函數圖形
2014 年 4 月,IPython 增加了 interactive widgets,提供了可以交互的界面組件,如下例:
from IPython.html.widgets import interact
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
def plot_sine(n):
x = np.arange(0, 20, 0.1)
y = np.sin(x/n)
plot(x,y)
interact(plot_sine, n=(1, 30, 0.1))

還可以這樣用。
from IPython.html.widgets import interact, IntSlider # 把之前的畫圖函數改寫成依賴於參數的函數
# 引入 interact 模塊
from IPython.html.widgets import interact, IntSlider
# 把之前的畫圖函數改寫成依賴於參數的函數
def test_interact(min_, max_, steps_):
x = np.linspace(min_, max_, steps_)
y = np.sin(x)
z = np.cos(x)
plot(x, y)
scatter(x, y)
# 使用 interact 來交互式的調試參數
interact(test_interact,
# 為每一個參數設定一個 interact 控件
min_=IntSlider(min=1, # 最小值
max=10, # 最大值
step=1, # 每次調節的步長
value=1), # 初始值
max_=IntSlider(min=10, max=20, step=1, value=10),
steps_=IntSlider(min=10, max=100, step=10, value=50))

4. Seaborn
Matplotlib 是 Python 主要的繪圖庫,但它本身很復雜,它的圖經過大量的調整才能變精致。因此,作為替代,推薦使用Seaborn。Seaborn本質上使用Matplotlib作為核心庫(就像Pandas對NumPy一樣)。它可以:
- 默認情況下就能創建賞心悅目的圖表。
- 創建具有統計意義的圖。
- 能理解pandas的DataFrame類型,所以它們一起可以很好地工作。
import seaborn as sns
# Load one of the data sets that come with seaborn
tips = sns.load_dataset("tips")
sns.jointplot("total_bill", "tip", tips, kind='reg');

參考資料
