我试图从一组指定z值的数据中绘制3D表面.虽然我设置了alpha = 1.0,但我得到了一些奇怪的透明效果,我可以在表面看到.
在绘图时和保存到文件时(包括png和pdf)都会出现人工制品:

我试过改变线宽,并将步幅数从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, …Run Code Online (Sandbox Code Playgroud) 我用C ++生成了一些要在Python程序中访问的数据。我已经弄清楚了如何在C ++中使用boost将序列化到二进制文件或从二进制文件反序列化,但是没有找到如何在Python中访问数据的方法(无需手动解析二进制文件)。
这是我的C ++代码进行序列化:
/* Save some data to binary file */
template <typename T>
int serializeToBinaryFile( const char* filename, const T& someValue,
                           const vector<T>& someVector )
{
    ofstream file( filename, ios::out | ios::binary | ios::trunc );
    if ( file.is_open() )
    {
        boost::archive::text_oarchive oa(file);
        int sizeOfDataType = sizeof(T);
        oa & sizeOfDataType;
        oa & someValue;
        oa & someVector;
        file.close();
        return 0;
    } else {
        return 1;
    }
}
Run Code Online (Sandbox Code Playgroud)
这是我的反序列化的C ++代码:
/* Load some data from binary file */
template <typename …Run Code Online (Sandbox Code Playgroud) 我想合并两个颜色图以生成 imshow 图。我想使用“RdBu”的范围 -0.4 到 0.4,然后从 0.4 到最大值(比如 1.5) 我想使用从相同的蓝色到另一种颜色(例如绿色)的渐变。
我怎样才能做到这一点?
这是我到目前为止所取得的进展:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors
from matplotlib.mlab import bivariate_normal
N = 100
'''
Custom Norm: An example with a customized normalization.  This one
uses the example above, and normalizes the negative data differently
from the positive.
'''
X, Y = np.mgrid[-3:3:complex(0, N), -2:2:complex(0, N)]
Z1 = (bivariate_normal(X, Y, 1., 1., 1.0, 1.0))**2  \
    - 0.4 * (bivariate_normal(X, Y, 1.0, 1.0, -1.0, …Run Code Online (Sandbox Code Playgroud) 我正在使用 mayaVI 绘制 3D 曲面和矢量场,使用函数 mayavi.mlab.surf 和 mayavi.mlab.quiver3D。与 Mayavi 管道相比,这些函数没有很多关键字参数可以让我修改表面和箭袋的外观,在那里我可以将事情编辑到最微小的细节(例如箭袋箭头半径 - 参见下图示例)。问题是,一旦我在 mayaVI 管道中进行了这些更改,似乎无法保存这些设置,直到下一次我想重新绘制图形。
我对编辑表面的轮廓属性和矢量的字形源属性(轴半径、尖端半径、尖端长度)特别感兴趣。
问题:是否有一种简单的方法可以将 Mayavi 管道设置保存到下一次,或者直接在我的 Python 脚本中编辑它们(即不使用 UI)?
代码:
#!/usr/bin/env python
import numpy as np
from mayavi import mlab
xmax = 2.0*np.pi
x, y, z = np.mgrid[-xmax:xmax:25j, -xmax:xmax:25j, -xmax:xmax:1j]
v_x = np.sin(x)*np.cos(y)
v_y = np.cos(x)*np.sin(y) 
v_z = np.zeros_like(z)
v_abs = np.sqrt(v_x**2 + v_y**2) # scalar field
surf = mlab.surf( x[:,:,0], y[:,:,0], v_abs[:,:,0], colormap='magma' )
obj_j = mlab.quiver3d( x[:,:,0], y[:,:,0], z[:,:,-1], v_x[:,:,0], v_y[:,:,0], v_z[:,:,0], mode='arrow')
mlab.show()
Run Code Online (Sandbox Code Playgroud)