问题描述
我正在尝试从Pandas.DataFrame
对象制作3d图。
要求
代码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'].values
,df['B'].values
)来构造一个Delaunay triangulation。
单数/简并配置会从Qhull调用错误,my answer here是用于构造Delaunay三角剖分的基础库(另请参见scatter plots)。
如果数据是奇异/简并的,则可以改用line plots或"joggle"。
如果您坚持使用表面图,并且数据是奇异的,则可以尝试https://vladmihalcea.com/hibernate-resulttransformer/ X,Y
数据,以便基础三角剖分不会失败。