无法为数据框制作带有图例的3d图

问题描述

我正在尝试从Pandas.DataFrame对象制作3d图。

要求

  • 要为z绘制的列数可能会有所不同,因此我在使用zx固定值的y值使用循环。该代码显示Code 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()

问题:

执行Code 1时出现错误-

Argument Z must be 2-dimensional. 

使用plot_trisurf时,我已经解决了它,如Code 2所示。

代码2

for x in df.columns:
    if(x!='A' and x!='B'):
      ax2.plot_trisurf(df['A'].values,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.

问题

  • 如何为Pandas.DataFrame制作3d图,其中Z的列数不同带有图例

注意

以上提供的数据仅用于实验,可能不统一,可以有小数点。

解决方法

您遇到的qhull错误可能是因为'A''B'列包含的数据是线性相关的,即,点在一条线上是几何形状的(您未发布数据,所以我无法验证)。 plot_trisurf函数尝试通过传递的X,Y参数(代码中的df['A'].valuesdf['B'].values)来构造一个Delaunay triangulation。 单数/简并配置会从Qhull调用错误,my answer here是用于构造Delaunay三角剖分的基础库(另请参见scatter plots)。

如果数据是奇异/简并的,则可以改用line plots"joggle"

如果您坚持使用表面图,并且数据是奇异的,则可以尝试https://vladmihalcea.com/hibernate-resulttransformer/ X,Y数据,以便基础三角剖分不会失败。