调整等值线图的绘制值

Adjusting Plotted Values of Contour Plots

我正在绘制等高线图,它们基本上是流体动力学系统的解析或数值解。我不认为技术方面的东西真的太重要了,但这是我的情节。第一个图是数值(矩阵系统)解,第二个图是很好的封闭形式(单论坛)解。

可以看出,我的第二个图的右侧有气泡。查看 legend/scale,我有负值。我不想有负值,或者不绘制它们,尽管我不确定如何在我的代码中调整它。我花了一些时间研究如何将 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')

这是所有必要的代码。剩下的就是矩阵解的东西,这只是一堆线性代数。关于我需要添加或调整以防止负值出现在第二个图上的任何帮助。它应该看起来和第一个一模一样。

I've spent some time looking into how to adjust the z values to being positive only

你能做什么在很大程度上取决于你想对零以下的结果做什么,如果你的唯一目的是让零以下的点显示为零,你可以简单地让它们为零,然而那会显示一个错误的结果。

    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)