Python繪相簿 matplotlib, sympy, mpmath與 Matlab 解析
最近初步學習了Python, 發現它的一個畫圖包 matplotlib 雖然與 MATLAB 的畫圖類似,但感覺還是 MATLAB 自己的畫圖更方便,更簡單。matlab 有 explot 與 ezmesh 這兩個快速生成函式的影象。
matplotlib 需要先定義資料範圍,有些麻煩,發現 python 有一個 sympy 包,專門處理符號數學的,有點類似 matlab 裡面的符號函式,用它來畫圖方便多了。 還有一個更方便的 mpmath 包,可以結合 lambda 表示式使用,它與前者相比不用事先定義符號變數。
一、二維影象
畫 [-10, 10] 範圍內的 y=x 2 y=x2y=x^2:
(1) 使用 matlab
ezplot('x^2',[-10,10])
一行程式碼,非常簡單
(2) 使用 mpmath 包裡面的畫圖
import mpmath as mp
mp.plot(lambda x: x*x, [-10, 10])
(3) Pyton 使用 sympy 包裡面的畫圖
from sympy.plotting import plot
from sympy import symbols
x = symbols('x')
p2 = plot(x*x, (x, -10, 10))
需要四行程式碼
(4) 使用 matplotlib 畫圖
import matplotlib.pyplot as plt
import numpy as np
x= np.arange(-10, 10, 0.1)
plt.plot(x*x)
也需要四行程式碼,畫的圖稍微簡略
二、三維影象
畫函式[-3, 3], [-2, 2] 內的 z=xe −x 2 −y 2 z=xe−x2−y2z=xe^{-x^2-y^2}
(1) 使用matlab 畫
ezmesh(@(x,y)x.*exp(-x.^2-y.^2),[-3,3], [-2,2])1
(2) 使用 mpmath 包畫
import mpmath as mp
import math
mp.splot(lambda x, y: x*math.exp(-x*x-y*y))
(3) 使用 sympy 畫
from sympy import symbols
from sympy.plotting import plot3d
from sympy.functions import exp
x, y = symbols('x y')
plot3d(x*exp(-x**2-y**2), (x, -3, 3), (y, -2, 2))
(4) 使用 matplotlib 畫
from matplotlib import pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(-3, 3, 0.1)
Y = np.arange(-2, 2, 0.1)
X, Y = np.meshgrid(X, Y)
Z = X*np.exp(-X**2 - Y**2)
ax.plot_surface(X, Y, Z)
plt.show()
綜合看來,畫圖還是 matlab 最好看方便, mpmath 畫 2d 圖不錯,但是 3d 圖太粗糙了; sympy 中規中矩; matplotlib 太費程式碼了。
更多Python相關資訊見 Python 專題頁面 https://www.linuxidc.com/topicnews.aspx?tid=17
Linux公社的RSS地址 : https://www.linuxidc.com/rssFeed.aspx
本文永久更新連結地址: https://www.linuxidc.com/Linux/2019-03/157657.htm