Python:matplotlib和mpl_toolkits.mplot3d的Axes3D.plot的问题

按照https://bugxch.github.io/matplot-%E4%B9%8B-3D-%E7%BB%98%E5%9B%BE%E6%8C%87%E5%8D%97/

import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
 
mpl.rcParams['legend.fontsize'] = 10
 
fig = plt.figure()
ax = fig.gca(projection='3d')
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
ax.plot(x, y, z, label='parametric curve')
ax.legend()

plt.show()

Python:matplotlib和mpl_toolkits.mplot3d的Axes3D.plot的问题_第1张图片

可是ax.plot填入三个坐标参数的时候,需注意参数的类型。

开始的时候:ax.plot(x, y, z),x,y,z均为'numpy.ndarray'类型,在运行时候总是报错:ValueError: input operand has more dimensions than allowed by the axis remapping,百思不得其解。减少一个参数z,可以运行,但是结果却变成了三维图中的平面图。

那么,ax.plot(x.tolist(), y.tolist(), z.tolist()),把x,y,z全部用tolist()转成list,仍然报之前的错误。

最后,把x,y,z组合成pandas.DataFrame,并且命名对应列名,tmp = pandas.DataFrame(x,columns=['X']),tmp['Y'] = y,tmp['Z'] = z,这时候按照列访问tmp,如ax.plot(tmp['X'], tmp['Y'], tmp['Z']),成果画出三维曲线。

你可能感兴趣的:(Python:matplotlib和mpl_toolkits.mplot3d的Axes3D.plot的问题)