使用matplotlib中的3D数据生成热图

时间:2014-04-04 20:05:01

标签: python numpy matplotlib visualization

我有一个函数returnValuesAtTime,它返回三个列表 - x_valsy_valsswe_vals。所有三个列表的长度相同,swe_vals中的每个元素对应x-value的{​​{1}}和x_vals的{​​{1}}。我希望使用y-value坐标和y_vals作为强度的图例生成热图。

我写了以下代码:

(x,y)

使用swe_vals获取三个列表后,我的长度为def plotValuesAtTimeMap(t): x_vals,y_vals,swe_vals=returnValuesAtTime(t) x_points=len(x_vals) y_points=len(y_vals) xx=np.linspace(x_vals[0],x_vals[-1],x_points) yy=np.linspace(y_vals[0],y_vals[-1],y_points) fig,ax=plt.subplots() im=ax.pcolormesh(xx,yy,z) fig.colorbar(im) ax.axis('tight') plt.show() returnValuesAtTime(t)。然后我使用这些来生成x和y方向的间距,限制是x_valsy_vals的第一个和最后一个元素。然后我尝试生成x_vals。但这给了我一个没有值的空y_vals

可能出现什么问题?使用3D colormesh数组而不是三个列表会解决问题吗?

每个清单的前10个要素是:

colormesh

修改

我添加了一个散点图,显示下面的(x,y)网格范围:

enter image description here

x和y值在列表中,每个长度为6804。每个(x,y)点在单独的列表中具有对应的z值,其长度也是6804。为了澄清我希望实现的目标,我想生成一个热图,如图,其中z轴的大小由图上每个网格的颜色表示。类似于下面显示的内容:

enter image description here

在示例图中,所有z值都相同。因此整个网格空间的颜色相同。

使用新结果图编辑(基于成员CT朱的建议):

enter image description here

1 个答案:

答案 0 :(得分:5)

如果将xyz重新定位为方形矩阵,您可以执行contourf绘图:

In [7]:X
Out[7]:
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

In [8]:Y
Out[8]:
array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
       [2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
       [3, 3, 3, 3, 3, 3, 3, 3, 3, 3],
       [4, 4, 4, 4, 4, 4, 4, 4, 4, 4],
       [5, 5, 5, 5, 5, 5, 5, 5, 5, 5],
       [6, 6, 6, 6, 6, 6, 6, 6, 6, 6],
       [7, 7, 7, 7, 7, 7, 7, 7, 7, 7],
       [8, 8, 8, 8, 8, 8, 8, 8, 8, 8],
       [9, 9, 9, 9, 9, 9, 9, 9, 9, 9]])

plt.contourf(X,Y,np.random.random((10,10))) #reshape Z too!
plt.colorbar()

enter image description here