使用绘制曲面时mpl_toolkits.mplot3d.Axes3D.plot_surface(),会出现似乎遵循绘制曲面曲线的线条.例如:
X, Y = numpy.meshgrid(numpy.arange(some_range), numpy.arange(some_other_range))
Z1, Z2 = numpy.array(getRate())
#getRate is a function that returns an array of shape (len(some_range), len(some_other_range)
fig = pyplot.figure()
ax = mplot3d.Axes3D(fig)
ax.plot_surface(X, Y, Z1, color='w', alpha=0.2)
ax.plot_surface(X, Y, Z2, color='b', alpha=0.2)
pyplot.show()
Run Code Online (Sandbox Code Playgroud)
有没有办法摆脱血腥的东西,所以你只是有一个光滑的表面?我附上了一张图片来表明我的意思.
所以我试图创建一个数字,从数据点呈现一个3d图,以及3个其他子图中的3个投影图.我可以毫无问题地为投影添加子图,但是当我尝试将3维图放入图中时,事情会适得其反.
这是我的代码:
def plotAll(data):
fig = plt.figure()
plot_3d = fig.add_subplot(221)
ax = Axes3D(plot_3d)
for i,traj in enumerate(data.values()):
ax.plot3D([traj[0][-1]],[traj[1][-1]],[traj[2][-1]],".",color=[0.91,0.39,0.046])
#plot_12v13 = fig.add_subplot(222)
#plot_projections(data,0,1)
#plot_13v14 = fig.add_subplot(223)
#plot_projections(data,1,2)
#plot_12v14 = fig.add_subplot(224)
#plot_projections(data,0,2)
#plt.plot()
Run Code Online (Sandbox Code Playgroud)
抛出:'AxesSubplot'对象没有属性'transFigure'
我正在使用matplotlib 0.99.3,非常感谢任何帮助,谢谢!
我正在使用matplotlib绘制两个参数的函数.我在matplotlib教程中复制了一个例子并用我自己的输入数据进行了转换:向量X和Y(在-3:3中等间隔数字)和Z =峰值(X,Y),峰值是我定义为befohand的函数.怎么了?
def peaks(x,y):
xsq=x**2
ysq=y**2
xsq_one=(x+1)**2
ysq_one=(y+1)**2
m1=3*(1-x)**2
m2=10*(x/5-x**3-y**5)
m3=1/3
return m1*numpy.exp(-xsq-ysq_one)-m2*numpy.exp(-xsq-ysq)-m3*numpy.exp(-xsq_one-ysq)
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.gca(projection='3d')
X=Y=numpy.arange(-3,3,0.01).tolist()
Z=[]
for i in range(len(X)):
Z.append(peaks(X[i],Y[i]))
ax.plot_surface(X, Y, Z, rstride=8, cstride=8, alpha=0.3)
cset = ax.contour(X, Y, Z, zdir='z', offset=-100)
cset = ax.contour(X, Y, Z, zdir='x', offset=-40)
cset = ax.contour(X, Y, Z, zdir='y', offset=40)
ax.set_xlabel('X')
ax.set_xlim(-40, 40)
ax.set_ylabel('Y')
ax.set_ylim(-40, 40)
ax.set_zlabel('Z')
ax.set_zlim(-100, 100)
plt.show()
Run Code Online (Sandbox Code Playgroud)
谢谢你的建议!
我试图在matplotlib中绘制一个三维图.我必须在单个3D图中绘制四个(或多个)半径的频率与幅度分布.我正在查看matplotlib.collections中提供的PolyCollection命令,我也查看了示例,但我不知道如何使用现有数据来获得该图.
我拥有的数量的尺寸是,
频率:4000 x 4,幅度:4000 x 4,半径:4
我想画一些类似的东西,

X轴为频率,Y轴为半径,Z轴为振幅.我该如何解决这个问题?
如何使用Sympy绘制以下3D曲线(作为示例)?我知道只需为t创建一个数组并在Matplotlib中执行此操作,但我不想绘制此曲线,而是学习如何以符号方式定义和绘制曲线.
alpha(t)=(cos(t),sin(t),t)
from sympy import *
t = symbols('t')
alpha = [cos(t), sin(t), t]
# now what?
Run Code Online (Sandbox Code Playgroud)
我尝试过以各种方式使用绘图方法,但这只会导致三条单独的1D曲线或错误.
如果我有3D matplotlib图(Axes3D对象),如何更改刻度线的颜色?我想出了如何更改轴线,刻度标签和轴标签的颜色.显而易见的解决方案,使用ax.tick_params(axis='x', colors='red'),只更改刻度标签而不是刻度标记本身.
以下是尝试将所有轴更改为红色并获取除刻度标记之外的所有轴的代码:
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import pyplot as plt
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter((0, 0, 1), (0, 1, 0), (1, 0, 0))
ax.w_xaxis.line.set_color('red')
ax.w_yaxis.line.set_color('red')
ax.w_zaxis.line.set_color('red')
ax.w_zaxis.line.set_color('red')
ax.xaxis.label.set_color('red')
ax.yaxis.label.set_color('red')
ax.zaxis.label.set_color('red')
ax.tick_params(axis='x', colors='red') # only affects
ax.tick_params(axis='y', colors='red') # tick labels
ax.tick_params(axis='z', colors='red') # not tick marks
fig.show()
Run Code Online (Sandbox Code Playgroud)
我在3D空间中有3个点,我想在3D中定义一个穿过这些点的平面.
X Y Z
0 0.65612 0.53440 0.24175
1 0.62279 0.51946 0.25744
2 0.61216 0.53959 0.26394
Run Code Online (Sandbox Code Playgroud)
另外我需要在3D空间中绘制它.
此处已触及该主题,但未提供有关如何创建3D图并将图像以(x,y)指定z高度插入平面的指示。
因此,为了提出一个简单且可复制的案例,假设我使用以下代码创建了一个3D图mplot3d:
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
X = np.arange(-5, 5, 0.25)
Y = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(X, Y)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.winter,
linewidth=0, antialiased=True)
ax.set_zlim(-1.01, 1.01)
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
plt.show()
Run Code Online (Sandbox Code Playgroud)
在级别上z=min(z)-1,这里-1是避免重叠的视觉偏移, …
我试图绘制两个正态分布变量的comun分布.
下面的代码绘制了一个正态的分布式变量.用于绘制两个正态分布式变量的代码是什么?
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.mlab as mlab
import math
mu = 0
variance = 1
sigma = math.sqrt(variance)
x = np.linspace(-3, 3, 100)
plt.plot(x,mlab.normpdf(x, mu, sigma))
plt.show()
Run Code Online (Sandbox Code Playgroud) 我是3D绘图的新手。我只想从5个点中构建一个金字塔并切入一个平面。我的问题是我不知道该如何填补问题。
points = np.array([[-1, -1, -1],
[1, -1, -1 ],
[1, 1, -1],
[-1, 1, -1],
[0, 0 , 1]])
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
r = [-1,1]
X, Y = np.meshgrid(r, r)
ax.plot_surface(X,Y,-1, alpha=0.5)
ax.plot_surface(X,Y,0.5, alpha=0.5, facecolors='r')
ax.scatter3D(points[:, 0], points[:, 1], points[:, 2])
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏。