【问题标题】:Unable to make 3d Plots with legend for dataframes无法为数据框制作带有图例的 3d 图
【发布时间】:2020-12-04 19:32:10
【问题描述】:

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

要求

  • z 绘制的列数可能会有所不同,因此我对z 值使用了一个循环,该值具有固定的xy 值。代码显示在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, 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.

问题

  • 如何为 Pandas.DataFrame 制作具有不同列数的 Z 与图例的 3d 图

注意

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

【问题讨论】:

    标签: python-3.x pandas numpy matplotlib graph


    【解决方案1】:

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

    如果您的数据是单数/退化数据,您可以改用 scatter plotsline plots

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-10
      • 2014-11-07
      • 2021-09-07
      • 2021-04-15
      • 1970-01-01
      • 2016-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多