Python 3.x 无法使用数据帧的图例进行三维打印

Python 3.x 无法使用数据帧的图例进行三维打印,python-3.x,pandas,numpy,matplotlib,graph,Python 3.x,Pandas,Numpy,Matplotlib,Graph,我正试图从一个Pandas.DataFrame对象制作一个3d绘图 要求 要为z绘制的列数可能会有所不同,因此我使用了一个循环,用于带有固定x和y值的z值。代码显示在代码1中 代码1 import matplotlib.pyplot as plt import urllib, base64 from mpl_toolkits.mplot3d import axes3d import numpy as np import pandas as pd column_names = ['A', '

我正试图从一个
Pandas.DataFrame
对象制作一个3d绘图

要求

  • 要为
    z
    绘制的列数可能会有所不同,因此我使用了一个循环,用于带有固定
    x
    y
    值的
    z
    值。代码显示在
    代码1
代码1

import matplotlib.pyplot as plt
import urllib, base64
from mpl_toolkits.mplot3d import axes3d
import numpy as np
import pandas as pd

column_names = ['A', 'B', 'C', 'D', 'E']
df = pd.DataFrame(columns=column_names)

fig2 = plt.figure(figsize=(15,15))
ax2 = fig2.add_subplot(111, projection='3d')

for x in df.columns:
    if(x!='A' and x!='B'):
      ax2.plot_surface(df['A'].values, df['B'].values, df[x].values, linewidth=0, antialiased=False)
      ax2.legend()

问题:

当我执行代码1时,我得到一个错误-

Argument Z must be 2-dimensional. 
我在使用-
plot\u trisurf
时解决了这个问题,如
code 2
所示

代码2

for x in df.columns:
    if(x!='A' and x!='B'):
      ax2.plot_trisurf(df['A'].values, df['B'].values, df[x].values, linewidth=0, antialiased=False)
      ax2.legend()

但现在我得到了一个不同的错误-

Error in qhull Delaunay triangulation calculation: singular input data (exitcode=2); use python verbose option (-v) to see original qhull error.
问题

  • 如何为带有图例的Z数据框制作不同列数的3d绘图
注意


上面提供的数据仅用于实验,可能不均匀,可能有小数。

您得到的qhull错误可能是因为
'A'
'B'
列包含线性相关的数据,即点在一条线上(您没有发布数据,因此我无法验证)。
plot_trisurf
函数尝试从传递给它的
X,Y
参数(代码中的
df['a']值
df['B']值
)构造一个。 单一/退化配置调用错误源,该错误源是用于构造Delaunay三角剖分的底层库(另请参见)

如果您的数据是单数/退化的,您可以使用或


如果您坚持曲面图,并且您的数据是单数的,那么您可以尝试使用
X,Y
数据,这样底层的三角剖分就不会失败。

您得到的qhull错误可能是因为
'a'
'B'
列包含线性相关的数据,即点在一条直线上(您没有发布数据,因此我无法验证)。函数
plot_trisurf
尝试从您传递的
X,Y
参数(df['a'].值,
df['B']值
)。 单一/退化配置调用错误源,该错误源是用于构造Delaunay三角剖分的底层库(另请参见)

如果您的数据是单数/退化的,您可以使用或

如果您坚持使用曲面图,并且您的数据是单数的,您可以尝试使用
X,Y
数据,以便底层三角剖分不会失败