在matplotlib中平滑外边缘

时间:2014-06-19 10:26:11

标签: python matplotlib smooth contourf

有两个问题也许有人可以帮助我。 我想用contoruf绘制立体投影,并想在Matplotlib中为Z方向的较高部分着色。 为此,我有两个问题。

  1. 我在使用meshgrid和griddata之前使用contourf进行绘图,其他边缘不平滑我怎样才能平滑它们? enter image description here

  2. 我想在Z中有一个对数刻度我怎么能这样做,我试图使用ticker.LogLocator,但后来我只得到一些颜色的部分。

  3. 这是我的代码:

    # craation of a 2D grid
    xi = np.linspace(min(X), max(X))
    yi = np.linspace(min(Y), max(Y))
    
    X1, Y1 = np.meshgrid(xi, yi)
    
    ##### interpolation
    Z1 = griddata(X, Y, Z,xi,yi)
    
    plt.contourf(X1,Y1,Z1,50,cmap=plt.cm.rainbow,vmax=abs(Z1).max(),
                 locator=ticker.LogLocator)
    
    plt.colorbar()
    
    plt.xlim(-1,1)
    plt.ylim(-1,1)
    
    plt.show()
    plt.set_zscale('log')
    plt.set_xlabel('X')
    plt.set_ylabel('Y')
    
    plt.show()
    

1 个答案:

答案 0 :(得分:0)

回答第一个问题:

您可以平滑轮廓值:

zmin = Z1.min()
zmax=Z1.max()
levels=linspace(zmin, zmax, 400)

然后将levels作为参数传递给plt.contourf()

要平滑外边缘,您必须在二维网格中使用更多值,这可以通过使用linspace()时所需的值数来实现:

nx = 1000
ny = 1000
xi = np.linspace(min(X), max(X), nx)
yi = np.linspace(min(Y), max(Y), ny)