Matplotlib绘制表面透明度伪影

9 浏览
0 Comments

Matplotlib绘制表面透明度伪影

我正在尝试从一组指定了z值的数据中绘制一个三维曲面。然而,我遇到了一些奇怪的透明度问题,即使我将alpha设置为1.0,仍然可以透过曲面看到后面的内容。

这个问题在绘图和保存为文件(包括png和pdf格式)时都存在:

enter image description here

我尝试过改变线宽,以及将strides的数量从1改变为10(后一种情况下,由于分辨率太粗糙,曲面不可见)。

问题:我如何消除这种透明度问题?

以下是我的代码:

import sys
import numpy as np
import numpy.ma as ma
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
y_label = r'x'
x_label = r'y'
z_label = r'z'
x_scale = 2.0*np.pi
y_scale = 2.0*np.pi
y_numPoints = 250
x_numPoints = 250
def quasiCrystal(x, y):
    z = 0
    for i in range(0,5):
        z += np.sin(x * np.cos(float(i)*np.pi/5.0) +
                    y * np.sin(float(i)*np.pi/5.0))
    return z
x = np.linspace(-x_scale, x_scale, x_numPoints)
y = np.linspace(-y_scale, y_scale, y_numPoints)
X,Y = np.meshgrid(x,y)
Z = quasiCrystal(X, Y)
f = plt.figure()
ax = f.gca(projection='3d')
surf = ax.plot_surface( X, Y, Z,
                        rstride=5, cstride=5,
                        cmap='seismic',
                        alpha=1,
                        linewidth=0,
                        antialiased=True,
                        vmin=np.min(Z),
                        vmax=np.max(Z)
                      )
ax.set_zlim3d(np.min(Z), np.max(Z))
f.colorbar(surf, label=z_label)
ax.set_xlabel(x_label)
ax.set_ylabel(y_label)
ax.set_zlabel(z_label)
plt.show()

这是我的实际数据的另一张图片,更容易看到透明度问题:

enter image description here

0