【问题标题】:3D plotting with Matplotlib in Python and keep getting TypeError: unsupported operand type(s) for -: 'list' and 'list'在 Python 中使用 Matplotlib 进行 3D 绘图并不断收到 TypeError: unsupported operand type(s) for -: 'list' and 'list'
【发布时间】:2012-01-19 06:07:09
【问题描述】:

尝试使用 matplotlib 绘制 3d 绘图,但由于某种原因,当我尝试设置 xi,yi 并不断收到以下消息时,我的代码失败:

xi = np.linspace(min(x_mtx), max(x_mtx))
  File "C:\Python27\lib\site-packages\numpy\core\function_base.py", line 80, in linspace
    step = (stop-start)/float((num-1))
TypeError: unsupported operand type(s) for -: 'list' and 'list'

代码:

def plot_3D(self,x_mtx,y_mtx,z_mtx,title,xlabel,ylabel):

    fig = plt.figure()
    ax = fig.gca(projection='3d')


    x = x_mtx
    y = y_mtx
    z = z_mtx


    xi = np.linspace(min(x_mtx), max(x_mtx))
    yi = np.linspace(min(y_mtx), max(y_mtx))



    X, Y = np.meshgrid(xi, yi)
    Z = griddata(x, y, z, xi, yi)

    Z = np.nan_to_num(Z)

    surf = ax.plot_surface(X, Y, Z, rstride=3, cstride=1,  cmap=cm.jet,
                           linewidth=0, antialiased=True)

    ax.set_zlim3d(np.min(Z), np.max(Z))

    fig.colorbar(surf)

    plt.xlabel(xlabel)
    plt.ylabel(ylabel)

    plt.title(title)

    plt.show()

我正在使用以下数据集:

x =[[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9],...,[[0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9]]
y =[[1,2,3,4],...,[1,2,3,4]
z =[[1604.18997105,1537.61273892,1475.55679943,1372.35580231,1338.5212552,1205.65768444,1123.58398781,1011.84290322,859.696324611],[1032.18731228,996.573332541,948.61368911,912.983432776,881.29239958,798.381328007,750.773525511,679.725673182,586.014048166],[727.489743398,674.426010669,660.796225936,636.607836391,603.244223602,559.648437086,513.633091109,473.594466259,417.134921259],[511.067337872,482.096743673,471.899423715,448.898733469,436.745110773,392.610890968,362.940790577,330.484896223,290.875981749]]

【问题讨论】:

    标签: python 3d plot matplotlib


    【解决方案1】:

    这是因为(大概)x_mtx 是一个矩阵,因此内置的max 返回一个列表,其中包含每一行中的最大元素x_mtx.

    如果要全局获取x_mtx 中的最小值/最大值,请改用 numpy 的 min/max,它返回整个矩阵的标量最小值,而不仅仅是每一行:

    xi = np.linspace(np.min(x_mtx), np.max(x_mtx))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-04
      • 2020-05-01
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      • 2016-08-30
      • 2018-02-10
      • 2021-03-27
      相关资源
      最近更新 更多