溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中常用的數學建模Matplotlib

發布時間:2020-09-10 16:58:00 來源:億速云 閱讀:722 作者:Leah 欄目:編程語言

這篇文章運用簡單易懂的例子給大家介紹Python中常用的數學建模Matplotlib,代碼非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

三劍客之Matplotlib

matplotlib 是python最著名的繪圖庫,它提供了一整套和Matlab相似的命令API,十分適合交互式地進行制圖。而且也可以方便地將它作為繪圖控件,嵌入GUI應用程序中。matplotlib 可以繪制多種形式的圖形包括普通的線圖,直方圖,餅圖,散點圖以及誤差線圖等;可以比較方便的定制圖形的各種屬性比如圖線的類型,顏色,粗細,字體的大小等;它能夠很好地支持一部分 TeX 排版命令,可以比較美觀地顯示圖形中的數學公式。

更多Matplotlib的相關知識,可以參考這篇文章:《利用Python的Matplotlib庫進行數據可視化》

Python中常用的數學建模Matplotlib

3.1 pylot介紹

Matplotlib 包含了幾十個不同的模塊, 如 matlab、mathtext、finance、dates 等,而 pylot 則是我們最常用的繪圖模塊,這也是本文介紹的重點。

3.1.1 中文顯示問題的解決方案

有很多方法可以解決此問題,但下面的方法恐怕是最簡單的解決方案了(我只在windows平臺上測試過,其他平臺請看官自測)。如果想了解更多,也可以參考我N年前的一片博文:matplotlib顯示中文的解決方案

>>> import matplotlib.pyplot as plt
>>> plt.rcParams['font.sans-serif'] = ['FangSong'] # 指定默認字體
>>> plt.rcParams['axes.unicode_minus'] = False     # 解決保存圖像時'-'顯示為方塊的問題

3.1.2 繪制最簡單的圖形

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> x = np.arange(0, 2*np.pi, 0.01)
>>> y = np.sin(x)
>>> plt.plot(x, y)
>>> plt.show()

Python中常用的數學建模Matplotlib

3.1.3 設置標題、坐標軸名稱、坐標軸范圍

如果你在python的shell中運行下面的代碼,而shell的默認編碼又不是utf-8的話,中文可能仍然會顯示為亂碼。你可以嘗試著把 u’正弦曲線’ 寫成 ‘正弦曲線’.decode(‘gbk’)或者’正弦曲線’.decode(‘utf-8’)

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from pylab import mpl
>>> mpl.rcParams['font.sans-serif'] = ['FangSong']
>>> mpl.rcParams['axes.unicode_minus'] = False
>>> x = np.arange(0, 2*np.pi, 0.01)
>>> y = np.sin(x)
>>> plt.plot(x, y)
>>> plt.title(u'正弦曲線', fontdict={'size':20})      # 設置標題
>>> plt.xlabel(u'弧度', fontdict={'size':16})         # 顯示橫軸名稱
>>> plt.ylabel(u'正弦值', fontdict={'size':16})       # 顯示縱軸名稱
>>> plt.axis([-0.1*np.pi, 2.1*np.pi, -1.1, 1.1])     # 設置坐標軸范圍
>>> plt.axis('equal')                                # xy軸等比例保持
>>> plt.show()

Python中常用的數學建模Matplotlib

3.1.4 設置點和線的樣式、寬度、顏色

plt.plot函數的調用形式如下:

plot(x, y, color='green', linestyle='dashed', linewidth=1, marker='o', markerfacecolor='blue', markersize=6)
plot(x, y, c='g', ls='--', lw=1, marker='o', mfc='blue', ms=6)

1、color指定線的顏色,可簡寫為“c”。顏色的選項為:

·藍色: ‘b’ (blue)

·綠色: ‘g’ (green)

·紅色: ‘r’ (red)

·墨綠: ‘c’ (cyan)

·洋紅: ‘m’ (magenta)

·黃色: ‘y’ (yellow)

·黑色: ‘k’ (black)

·白色: ‘w’ (white)

·灰度表示: e.g. 0.75 ([0,1]內任意浮點數)

·RGB表示法: e.g. ‘#2F4F4F’ 或 (0.18, 0.31, 0.31)

1、linestyle指定線型,可簡寫為“ls”。線型的選項為:

·實線: ‘-’ (solid line)

·虛線: ‘–’ (dashed line)

·虛點線: ‘-.’ (dash-dot line)

·點線: ‘:’ (dotted line)

·無: '‘或’ ‘或’None’

1、linewidth指定線寬,可簡寫為“lw”。

2、marker描述數據點的形狀

·點線: ‘.’

·點線: ‘o’

·加號: '+

·叉號: ‘x’

·上三角: ‘^’

·上三角: ‘v’

1、markerfacecolor指定數據點標記的表面顏色,可 簡寫為“ mfc”。

2、markersize指定數據點標記的大小,可 簡寫為“ ms”。

3.1.5 文本標注和圖例

我們分別使用不同的線型、顏色來繪制以10、e、2為基的一組冪函數曲線,演示文本標注和圖例的使用。

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> from pylab import mpl
>>> mpl.rcParams['font.sans-serif'] = ['FangSong']
>>> mpl.rcParams['axes.unicode_minus'] = False
>>> x = np.linspace(-4, 4, 200)
>>> f1 = np.power(10, x)
>>> f2 = np.power(np.e, x)
>>> f3 = np.power(2, x)
>>> plt.plot(x, f1, 'r', ls='-', linewidth=2, label='$10^x$')
>>> plt.plot(x, f2, 'b', ls='--', linewidth=2, label='$e^x$')
>>> plt.plot(x, f3, 'g', ls=':', linewidth=2, label='$2^x$')
>>> plt.axis([-4, 4, -0.5, 8])
>>> plt.text(1, 7.5, r'$10^x$', fontsize=16)
>>> plt.text(2.2, 7.5, r'$e^x$', fontsize=16)
>>> plt.text(3.2, 7.5, r'$2^x$', fontsize=16)
>>> plt.title('冪函數曲線', fontsize=16)
>>> plt.legend(loc='upper left')
>>> plt.show()

Python中常用的數學建模Matplotlib

在繪制圖例時,loc用于指定圖例的位置,可用的選項有:

·best

·upper right

·upper left

·lower left

·lower right

3.2 繪制多軸圖

在介紹如何將多幅子圖繪制在同一畫板的同時,順便演示如何繪制直線和矩形。我們可以使用subplot函數快速繪制有多個軸的圖表。subplot函數的調用形式如下:

subplot(numRows, numCols, plotNum)

subplot將整個繪圖區域等分為numRows行 * numCols列個子區域,然后按照從左到右,從上到下的順序對每個子區域進行編號,左上的子區域的編號為1。如果numRows,numCols和plotNum這三個數都小于10的話,可以把它們縮寫為一個整數,例如subplot(323)和subplot(3,2,3)是相同的。subplot在plotNum指定的區域中創建一個軸對象。如果新創建的軸和之前創建的軸重疊的話,之前的軸將被刪除。

>>> import matplotlib.pyplot as plt
>>> plt.subplot(221) # 兩行兩列的第1個位置
>>> plt.axis([-1, 2, -1, 2])
>>> plt.axhline(y=0.5, color='b')
>>> plt.axhline(y=0.5, xmin=0.25, xmax=0.75, color='r')
>>> plt.subplot(222) # 兩行兩列的第2個位置
>>> plt.axis([-1, 2, -1, 2])
>>> plt.axvline(x=0, ymin=0, linewidth=4, color='r')
>>> plt.axvline(x=1.0, ymin=-0.5, ymax=0.5, linewidth=4, color='g')
>>> plt.subplot(212) # 兩行一列的第2個位置
>>> plt.axis([-1, 2, -1, 2])
>>> plt.axvspan(1.25, 1.55, facecolor='g', alpha=0.5)
>>> plt.axhspan(0.25, 0.75, facecolor='0.5', alpha=0.5)
>>> plt.show()

Python中常用的數學建模Matplotlib

3.3 常用繪圖類型

3.3.1 直方圖

用numpy隨機生成一個符合正態分布的數據集,統計分段區域內數據的個數。

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> data = np.random.normal(5.0, 3.0, 1000)
>>> plt.hist(data)
>>> bins = np.arange(-5, 16, 1)
>>> plt.hist(data, bins) # 使用自定義的分段區域
>>> plt.show()

Python中常用的數學建模Matplotlib

3.3.2 散點圖

使用plot()繪圖時,如果指定樣式參數為僅繪制數據點(linestyle=‘None’),那么所繪制的就是一幅散列圖。這種方法所繪制的點無法單獨指定數據點的顏色和大小,而使用scatter()繪制散列圖就可以指定每個點的顏色和大小。

plt.scatter函數的調用形式如下:

scatter(x,y,s=None,c=None,marker=None,cmap=None,norm=None,vmin=None,vmax=None,alpha=None,linewidths=None,verts=None,
edgecolors=None,hold=None,data=None,**kwargs)

scatter()的前兩個參數是數組,分別指定每個點的X軸和Y軸的坐標。s參數指定點的大 小,值和點的面積成正比,它可以是一個數,指定所有點的大小,也可以是數組,分別對每個點指定大小。c參數指定每個點的顏色,可以是數值或數組。這里使用一維數組為每個點指定了一個數值。通過顏色映射表,每個數值都會與一個顏色相對應。默認的顏色映射表中藍色與最小值對應,紅色與最大值對應。當c參數是形狀為(N,3)或(N,4)的二維數組時,則直接表示每個點的RGB顏色。marker參數設置點的形狀,可以是個表示形狀的字符串,也可以是表示多邊形的兩個元素的元組,第一個元素表示多邊形的邊數,第二個元素表示多邊形的樣式,取值范圍為0、1、2、3。0表示多邊形,1表示星形,2表示放射形,3表示忽略邊數而顯示為圓形。alpha參數設置點的透明度。facecolors參數為“none”時,表示散列點沒有填充色。

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> x = np.random.rand(50)
>>> y = np.random.rand(50)
>>> area = np.pi * (15 * np.random.rand(50))**2
>>> color = 2 * np.pi * np.random.rand(50)
>>> plt.scatter(x, y, s=area, c=color, alpha=0.5, cmap=plt.cm.hsv)
>>> plt.show()

Python中常用的數學建模Matplotlib

3.3.3 梯形圖、柱狀圖、填充圖

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> n = np.array([0,1,2,3,4,5])
>>> x = np.linspace(-0.75, 1., 100)
>>> plt.subplot(131)
>>> plt.step(n, n**2, lw=2)
>>> plt.subplot(132)
>>> plt.bar(n, n**2, align="center", width=0.5, alpha=0.5)
>>> plt.subplot(133)
>>> plt.fill_between(x, x**2, x**3, color="green", alpha=0.5)
>>> plt.show()

Python中常用的數學建模Matplotlib

3.3.4 對數坐標

plot()所繪制圖表的X-Y軸坐標都是算術坐標。繪制對數坐標圖的函數有三個:semilogx()、semilogy()和loglog(),它們分別繪制X軸為對數坐標、Y軸為對數坐標以及兩個軸都為對數坐標時的圖表。

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> x = np.linspace(0, 3, 100)
>>> y = np.power(2, np.power(2,x))
>>> plt.subplot(121)
>>> plt.semilogy(x, y , '-r')
>>> plt.subplot(122)
>>> plt.plot(x,y, '--g')
>>> plt.show()

Python中常用的數學建模Matplotlib

3.3.5極坐標繪圖

極坐標系是和笛卡爾(X-Y)坐標系完全不同的坐標系,極坐標系中的點由一個夾角和一段相對中心點的距離來表示。polar(theta, r, **kwargs)可以直接創建極坐標子圖并在其中繪制曲線。也可以使用程序中調用subplot()創建子圖時通過設 polar參數為True,創建一個極坐標子圖,然后調用plot()在極坐標子圖中繪圖。

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> theta = np.arange(0, 2*np.pi, 0.02)
>>> plt.polar(theta, 1.4*np.cos(5*theta), "--", linewidth=2)
>>> plt.polar(theta, 1.8*np.cos(4*theta), linewidth=2)
>>> plt.rgrids(np.arange(0.5, 2, 0.5), angle=45)
>>> plt.thetagrids([0, 45])thetagridlabel objects>)
>>> plt.show()
>>>

Python中常用的數學建模Matplotlib

3.4 2D繪圖

3.4.1 等值線圖

所謂等值線,是指由函數值相等的各點連成的平滑曲線。等值線可以直觀地表示二元函數值的變化趨勢,例如等值線密集的地方表示函數值在此處的變化較大。matplotlib中可以使用contour()和contourf()描繪等值線,它們的區別是:contourf()所得到的是帶填充效果的等值線。

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> y, x = np.ogrid[-2:2:200j, -3:3:300j]
>>> z = x * np.exp( - x**2 - y**2)
>>> extent = [np.min(x), np.max(x), np.min(y), np.max(y)]
>>> plt.subplot(121)
>>> cs = plt.contour(z, 10, extent=extent)
>>> plt.clabel(cs)
<a list of 8 text.Text objects>
>>> plt.subplot(122)
>>> plt.contourf(x.reshape(-1), y.reshape(-1), z, 20)
>>> plt.show()

為了更淸楚地區分X軸和Y軸,這里讓它們的取值范圍和等分次數均不相同.這樣得 到的數組z的形狀為(200, 300),它的第0軸對應Y軸、第1軸對應X軸。

調用contour()繪制數組z的等值線圖,第二個參數為10,表示將整個函數的取值范圍等分為10個區間,即顯示的等值線圖中將有9條等值線??梢允褂胑xtent參數指定等值線圖的X軸和Y軸的數據范圍。

contour()所返回的是一個QuadContourSet對象, 將它傳遞給clabel(),為其中的等值線標上對應的值。

調用contourf(),繪制將取值范圍等分為20份、帶填充效果的等值線圖。這里演示了另外一種設置X、Y軸取值范圍的方法,它的前兩個參數分別是計算數組z時所使用的X軸和Y軸上的取樣點,這兩個數組必須是一維的。

Python中常用的數學建模Matplotlib

3.4.2 二維數據的平面色彩顯示

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> data=np.clip(np.random.randn(5,5),-1,1)
>>> plt.subplot(221)
>>> plt.imshow(data)
>>> plt.subplot(222)
>>> plt.imshow(data,cmap=plt.cm.cool)
>>> plt.subplot(223)
>>> plt.imshow(data,cmap=plt.cm.hot)
>>> plt.colorbar()
>>> plt.subplot(224)
>>> im = plt.imshow(data,cmap=plt.cm.winter)
>>> plt.colorbar(im, cmap=plt.cm.winter, ticks=[-1,0,1])
>>> plt.show()

Python中常用的數學建模Matplotlib

3.5 3D繪圖

雖然matplotlib主要專注于繪圖,并且主要是二維的圖形,但是它也有一些不同的擴展,能讓我們在地理圖上繪圖,讓我們把Excel和3D圖表結合起來。在matplotlib的世界里,這些擴展叫做工具包(toolkits)。工具包是一些關注在某個話題(如3D繪圖)的特定函數的集合。

比較流行的工具包有Basemap、GTK 工具、Excel工具、Natgrid、AxesGrid和mplot3d。

mpl_toolkits.mplot3工具包提供了一些基本的3D繪圖功能,其支持的圖表類型包括散點圖(scatter)、曲面圖(surf)、線圖(line)和網格圖(mesh)。雖然mplot3d不是一個最好的3D圖形繪制庫,但是它是伴隨著matplotlib產生的,因此我們對其接口已經很熟悉了。

下面是一個使用plot_surface繪制3d曲面圖的例子。

>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> import mpl_toolkits.mplot3d
>>> x, y = np.mgrid[-2:2:50j,-2:2:50j]
>>> z = x*np.exp(-x**2-y**2)
>>> ax = plt.subplot(111,projection='3d')
>>> ax.plot_surface(x,y,z,rstride=2,cstride=1,cmap=plt.cm.coolwarm,alpha=0.8)
>>> ax.set_xlabel('x')
>>> ax.set_ylabel('y')
>>> ax.set_zlabel('z')
>>> plt.show()

Python中常用的數學建模Matplotlib


關于Python中常用的數學建模Matplotlib就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女