小编fro*_*nts的帖子

Matplotlib plot_surface transparency artefact

我试图从一组指定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)

python numpy matplotlib

7
推荐指数
2
解决办法
1万
查看次数

C ++中的boost :: serialization,Python中的反序列化

我用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)

c++ python boost

5
推荐指数
2
解决办法
2684
查看次数

在 matplotlib 中合并颜色图

我想合并两个颜色图以生成 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)

python matplotlib

4
推荐指数
1
解决办法
3101
查看次数

在 Python 脚本中设置 mayaVI 管道属性

我正在使用 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)

python matplotlib mayavi mayavi.mlab

2
推荐指数
1
解决办法
219
查看次数

标签 统计

python ×4

matplotlib ×3

boost ×1

c++ ×1

mayavi ×1

mayavi.mlab ×1

numpy ×1