我正在制作等高線圖,這些圖基本上是流體動力系統的決議解或數值解。我不認為技術性的東西真的很重要,但這是我的情節。第一個圖是數值(矩陣系統)解,第二個圖是很好的封閉形式(單一論壇)解。

可以看出,我的第二個圖在右側有氣泡。查看圖例/比例,我有負值。我不想有負值,或者不繪制它們,盡管我不確定如何在我的代碼中調整它。我花了一些時間研究如何將 z 值調整為僅正值,但我似乎無法理解。我將放棄我的情節代碼,然后是我在情節中使用的漂亮的封閉形式函式。
import numpy as np
import matplotlib.pyplot as plt
import scipy as sp
import scipy.special as sp1
from mpl_toolkits.mplot3d import Axes3D
def v(r,z,gamma):
a=r*(1-z/gamma)
sums = 0
for n in range(1,26):
sums = ((sp1.iv(1(n*np.pi*r)/gamma))/(n*sp1.iv(1(n*np.pi)/gamma)))*np.sin(n*np.pi*z/gamma)
return a-(2/np.pi)*sums
def plot_contour(a, filename=None, zlabel='v(r,z)',cmap=plt.cm.gnuplot):
fig = plt.figure(figsize=(5,4))
ax = fig.add_subplot(111)
x = np.arange(a.shape[0])
y = np.arange(a.shape[1])
X, Y = np.meshgrid(x, y)
Z = a[X, Y]
cset = ax.contourf(X, Y, Z, 20, cmap=cmap)
ax.set_xlabel('r')
ax.set_ylabel('z')
ax.set_title('\u0393=2.5')
ax.axis('off')
ax.set_aspect(1)
cb = fig.colorbar(cset, shrink=0.5, aspect=5)
cb.set_label(zlabel)
if filename:
fig.savefig(filename,dpi=1600)
plt.close(fig)
return filename
else:
return ax
...
plot_contour(v1, 'gamma25e 1')
這是所有必要的代碼。剩下的就是矩陣解的東西,就是一堆線性代數。關于我需要添加或調整以防止負值出現在第二個圖中的任何幫助。它應該看起來和第一個完全一樣。
uj5u.com熱心網友回復:
我花了一些時間研究如何將 z 值調整為僅正值
你能做什么很大程度上取決于你想對零以下的結果做什么,如果你的唯一目的是讓零以下的點顯示為零,你可以簡單地將它們設為零,但這會顯示錯誤的結果。
x = np.arange(a.shape[0])
y = np.arange(a.shape[1])
X, Y = np.meshgrid(x, y)
Z = a[X, Y]
Z[Z < 0] = 0
另一種解決方案是減去資料的最小值,使結果的最小值為 0。
x = np.arange(a.shape[0])
y = np.arange(a.shape[1])
X, Y = np.meshgrid(x, y)
Z = a[X, Y]
Z -= np.amin(Z)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/371889.html
標籤:Python matplotlib 阴谋 轮廓
上一篇:Matplotlib顏色圖——為每個圖形/線條/主題選擇不同的顏色
下一篇:如何用計數和百分比注釋水平條形圖
