我试图从一组指定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) 我有一组 PDF,需要为 PDF 域的某个部分绘制。但是,当我在 3d 绘图上绘制线条时,每个 PDF 都会有尾部,
有没有一种干净的方法来不绘制发生在我的情节限制之外的尾巴?我知道我可以将数据更改为 NaN 以达到相同的效果,但我想在 matplotlib 中执行此操作。这是我当前的解决方法代码,
`# trim the data
y = np.ones(PDF_x.shape)*PDF_x
y[y>95]= np.nan
y[y<75]= np.nan
# plot the data
fig = plt.figure()
ax = fig.gca(projection='3d')
for i in range(PDF_capacity.shape[1]):
ax.plot(life[i]*np.ones((PDF_x.shape)),y,PDF_capacity[:,i], label='parametric curve')
# set the axis limits
ax.set_ylim(75,95)
# add axis labels
ax.set_xlabel('charge cycles to failure point of 75% capacity')
ax.set_ylabel('capacity at 100 charge cycles')
ax.set_zlabel('probability')`
Run Code Online (Sandbox Code Playgroud)
修剪后,我可以制作以下情节,
我想绘制一个似然分布,基本上是一个NxT矩阵,其中每一行代表每个时间步长t (t=0...T) 中某个变量的分布,这样我就可以可视化最大似然估计的轨迹屈服。
我想象了几个二维图,一个在另一个前面 - 像这样:

到目前为止,基于这个我已经试过:
def TrajectoryPlot(P):
P=P[0:4]
fig = plt.figure()
ax = fig.gca(projection='3d')
def cc(arg):
return colorConverter.to_rgba(arg, alpha=0.6)
xs = np.arange(0, len(P[0]))
verts = []
zs = [0.0, 1.0, 2.0, 3.0, 4.0]
for i in range(len(P)):
print(i)
verts.append(list(zip(xs, P[i])))
poly = PolyCollection(verts, facecolors=[cc('r'), cc('g'), cc('b'),
cc('y')])
poly.set_alpha(0.7)
ax.add_collection3d(poly, zs=zs, zdir='y')
ax.set_xlabel('X')
ax.set_ylabel('Likelihood')
ax.set_zlabel('Time')
plt.show()
Run Code Online (Sandbox Code Playgroud)
但这还行不通。