按照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()

可是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']),成果画出三维曲线。
本文介绍了在使用matplotlib的mpl_toolkits.mplot3d.Axes3D.plot绘制3D曲线时遇到的类型错误问题。通过尝试将numpy数组转换为list或使用pandas DataFrame来组织数据,最终成功解决了ValueError并绘制出正确的3D曲线。
3062





