一、contourplot怎麼調參數範圍
import numpy as np import matplotlib.pyplot as plt #生成數據 x = np.linspace(-5, 5, 50) y = np.linspace(-5, 5, 50) X, Y = np.meshgrid(x, y) Z = np.sin(np.sqrt(X**2 + Y**2)) #調整參數範圍 plt.contourf(X, Y, Z, levels=np.linspace(-1,1,20), cmap=plt.cm.hot) C = plt.contour(X, Y, Z, 10, colors='black', linewidth=.5) plt.clabel(C, inline=True, fontsize=10) plt.show()
contourplot函數用於繪製二元函數的等高線圖。首先需要準備一組數據,可以使用numpy生成。使用plt.contourf()來繪製等高線圖的填充顏色,其中levels參數用於設置顏色分區層數,cmap用於選擇配色方案。plt.contour()用於繪製等高線輪廓,其中colors參數用於選擇輪廓線顏色,linewidth參數用於設置輪廓線粗細。plt.clabel()用於繪製輪廓線標籤,其中inline參數用於控制標籤是否放置在線內部,fontsize用於控制標籤的字體大小。
二、contourplot函數
import numpy as np import matplotlib.pyplot as plt #生成數據 x = np.linspace(-5, 5, 50) y = np.linspace(-5, 5, 50) X, Y = np.meshgrid(x, y) Z = np.sin(np.sqrt(X**2 + Y**2)) #繪製等高線圖 plt.contour(X, Y, Z, 10, colors='black') plt.show()
可以看到,contourplot函數繪製的是等高線輪廓,由於沒有填充顏色,圖像較為簡潔。
三、contourplot比例
import numpy as np import matplotlib.pyplot as plt #生成數據 x = np.linspace(-5, 5, 50) y = np.linspace(-5, 5, 50) X, Y = np.meshgrid(x, y) Z = np.sin(np.sqrt(X**2 + Y**2)) #不等比例繪圖 fig, ax = plt.subplots() a = .8 fig.set_size_inches(a*6.4, a*4.8) ax.contourf(X, Y, Z, levels=np.linspace(-1,1,20), cmap=plt.cm.hot) C = ax.contour(X, Y, Z, 10, colors='black', linewidth=.5) ax.clabel(C, inline=True, fontsize=10) plt.show()
可以使用fig.set_size_inches()函數自定義圖片比例,其中參數a為縮放比例。為了保持等比例繪圖,x軸的長度應該為y軸長度的1.33倍。
四、contourplot3d
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D #生成數據 x = np.linspace(-5, 5, 50) y = np.linspace(-5, 5, 50) X, Y = np.meshgrid(x, y) Z = np.sin(np.sqrt(X**2 + Y**2)) #繪製3D圖像 fig = plt.figure() ax = fig.gca(projection='3d') ax.plot_surface(X, Y, Z, cmap=plt.cm.hot) plt.show()
以上是contourplot函數繪製三維圖像的基本方法,通過設置參數projection=’3d’來告訴Python需要繪製3D圖像,然後使用ax.plot_surface()函數來繪製3D圖像。
五、contourplot3D函數
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D #生成數據 x = np.linspace(-5, 5, 50) y = np.linspace(-5, 5, 50) X, Y = np.meshgrid(x, y) Z = np.sin(np.sqrt(X**2 + Y**2)) #繪製3D等高線圖 fig = plt.figure() ax = fig.gca(projection='3d') ax.contour(X, Y, Z, 10, cmap=plt.cm.hot) plt.show()
contourplot3D函數使用方法類似於contourplot函數,只不過是用於繪製3D等高線圖而不是3D圖像。其中,levels參數用於設置顏色分區層數,cmap用於選擇配色方案。
六、contourplot和plot區別
import numpy as np import matplotlib.pyplot as plt #生成數據 x = np.linspace(-5, 5, 50) y = np.linspace(-5, 5, 50) X, Y = np.meshgrid(x, y) Z = np.sin(np.sqrt(X**2 + Y**2)) #繪製等高線圖和曲面圖 fig = plt.figure() ax1 = fig.add_subplot(121) ax2 = fig.add_subplot(122, projection='3d') ax1.contour(X, Y, Z, 10, colors='black') ax2.plot_surface(X, Y, Z, cmap=plt.cm.hot) plt.show()
可以看到,contourplot和plot的區別在於contourplot繪製出的是等值線圖,plot則直接繪製出了曲面。在上方示例中,使用contourplot和plot繪製出了等高線圖和曲面圖。
七、contourplot函數有地方畫不出來
使用一些特殊函數,比如圓錐線(z^2=x^2+y^2)這種函數,contourplot函數就無法進行繪製,因為這些函數出現奇點。這種情況下,需要使用contourplot3D函數。
八、contourplot3D函數畫奇點
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D #生成數據 x = np.linspace(-1, 1, 100) y = np.linspace(-1, 1, 100) X, Y = np.meshgrid(x, y) Z = X ** 2 + Y ** 2 #繪製圖像 fig = plt.figure() ax = fig.gca(projection='3d') ax.plot_surface(X, Y, Z, cmap=plt.cm.hot) plt.show()
在contourplot3D函數中無法繪製出奇點,需要使用plot_surface()函數進行曲面繪製,該函數應該是基於顏色填充的方法繪圖,因此不會出現奇點。
九、contourplot函數局部不能畫
在contourplot函數中一些函數局部變化較為複雜,造成函數在局部無法使用等高線的方法表示。這種時候,可以考慮將總體分為兩個部分,一部分進行等高線表示,一部分進行平面表示。
import numpy as np import matplotlib.pyplot as plt #生成數據 x = np.linspace(-1, 1, 1000) y = np.linspace(-1, 1, 1000) X, Y = np.meshgrid(x, y) Z = X ** 2 - Y ** 2 #繪製圖像 fig = plt.figure() ax1 = fig.add_subplot(121) ax2 = fig.add_subplot(122) #等高線表示 ax1.contour(X, Y, Z, 5, colors='black') #平面表示 x_subs = np.linspace(-1, 1, 100) y_subs = np.linspace(-.01, .01, 100) X_subs, Y_subs = np.meshgrid(x_subs, y_subs) ax2.plot_surface(X_subs, Y_subs, X_subs ** 2 - Y_subs ** 2, cmap=plt.cm.hot) plt.show()
如上圖所示,將函數分別進行等高線和平面表示,可以獲得更加精細的圖像,細節表現會更好。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/154795.html