尽管使用了搜索功能,我一直无法找到答案。我有两个假设,但不知道它们可以适用多远。现在问题是:
我想画一个轮廓。为此,我在这里得到以下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行, new _data = np.array(data,dtype = dtype,copy = copy,subok = True,ndmin = ndmin) ValueError:使用序列设置数组元素。
现在假设可能导致此问题:
或
答案 0 :(得分:1)
正如@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")
产生一个像这样的计数图:
但我个人不会在这种情况下使用轮廓,因为直方图可能会很嘈杂。
答案 1 :(得分:0)
你的回溯表明错误没有从调用matplotlib引起,它是numpy引发了ValueError。