首页 文章

Python:绘制等高线图时键入错误

提问于
浏览
0

尽管使用搜索功能,我一直无法找到答案 . 我有两个假设,但不知道他们可以适用多远 . 现在的问题是:

我想绘制一个轮廓 . 为此,我在这里得到以下python代码:

import numpy as np
import matplotlib.pyplot as plt

xi=list_of_distance
yi=list_of_angle

x = np.arange(0,54,0.2)
y = np.arange(0,180,2.0)

Z = np.histogram2d(xi,yi,bins=(274,90))
X, Y = np.meshgrid(x, y)

plt.contour(X,Y,Z)
plt.ylabel('angles')
plt.xlabel('distance')
plt.colorbar()
plt.show()

xi和yi是包含浮点值的列表 . x和y定义'interval'...例如:x生成一个列表,其值为0到54,步长为0.2 y生成一个列表,其值为0到180,步长为2.0

使用Z我利用numpy函数创建2D直方图 . 实际上这似乎是导致麻烦的地方 .

调用函数plt.contour(X,Y,Z)时,会出现以下错误消息:

...文件“/usr/lib/pymodules/python2.7/numpy/ma/core.py”,第2641行,in new _data = np.array(data,dtype = dtype,copy = copy,subok = True ,ndmin = ndmin)ValueError:使用序列设置数组元素 .

现在假设可能导致这个问题:

  • 好像它需要一个数组,而不是一个numpy数组,它接收一个列表

要么

  • 我们得到的排比其他人短(我想到的是,在一年前同事遇到这样的问题之后 - 通过弄清楚最后一行是比其他所有人短2个元素来解决这个问题...)

2 回答

  • 0

    正如@rocksportrocker所暗示的,您需要考虑 histogram2d 除了直方图之外还返回边 . 另一个细节是您可能希望明确传入范围,否则将根据数据中的实际最小值和最大值为您选择一个 . 然后,您需要将边缘转换为绘图的单元格中心 . 像这样的东西:

    import numpy as np
    import matplotlib.pyplot as plt
    
    n = 1000000                     # how many data points
    xmin, xmax = 0.0, 54.0          # distances
    ymin, ymax = 0.0, 180.0         # angles
    
    # make up some random data
    xi=np.random.normal(xmax/2.0, xmax/4.0, n)
    yi=np.random.normal(ymax/3.0, ymax/3.0, n)
    
    Z, xedges, yedges = np.histogram2d(xi,yi, bins=(270,90), range=[[xmin, xmax], [ymin, ymax]])
    
    # find the cell centers from the cell edges
    x = 0.5*(xedges[:-1] + xedges[1:])
    y = 0.5*(yedges[:-1] + yedges[1:])
    
    # promote to 2D arrays
    Y, X = np.meshgrid(y, x)
    
    plt.contour(X,Y,Z)
    plt.ylabel('angles')
    plt.xlabel('distance')
    plt.colorbar()
    plt.savefig("hist2d.png")
    

    产生一个像这样的countour图:

    hist2d.png

    但我个人不会在这种情况下使用轮廓,因为直方图可能会很吵 .

  • 1

    你的回溯表明错误没有从调用matplotlib引起,它是numpy引发了ValueError .

相关问题