Python 使用matplotlib在热图中绘制x、y和数据

Python 使用matplotlib在热图中绘制x、y和数据,python,arrays,numpy,matplotlib,plot,Python,Arrays,Numpy,Matplotlib,Plot,使用matplotlib在二维热图中绘制数据时遇到一些问题 代码如下: from ugtm import eGTM import numpy as np from sklearn import preprocessing import matplotlib.pyplot as plt from scipy.interpolate import griddata X_train = np.random.randn(100, 50) X_test = np.random.randn(50, 5

使用matplotlib在二维热图中绘制数据时遇到一些问题

代码如下:

from ugtm import eGTM 
import numpy as np
from sklearn import preprocessing
import matplotlib.pyplot as plt
from scipy.interpolate import griddata


X_train = np.random.randn(100, 50)
X_test = np.random.randn(50, 50)

gtm = eGTM().fit(X_train)

responsibilities = gtm.optimizedModel.matR  

nodes_cumulated_responsibilities = preprocessing.MinMaxScaler().fit_transform(np.sum(gtm.optimizedModel.matR,0).reshape(-1,1))

nodes_coordinates = gtm.optimizedModel.matX

transformed = eGTM().fit(X_train).transform(X_test)

Z, xedges, yedges = np.histogram2d(nodes_coordinates[:,0], nodes_coordinates[:,1],normed=True,
                                   bins=15,weights=nodes_cumulated_responsibilities[:,0])

plt.figure()
plt.pcolormesh(xedges, yedges,Z.T,cmap='bone_r')
plt.scatter(transformed[:,0],transformed[:,1],color='r')     
plt.title('np.hist2d')
我有“nodes_坐标”数组形状(256,2),它表示节点的坐标x,y。然后我有“nodes\u cumulated\u responsibility”数组形状(256,1),表示各个x,y坐标中每个节点的值。我还有一个“转换”的数组形状(50,2),代表50个细胞,它们“X_测试”由eGTM在热图中命中

接下来,我想以节点坐标和节点累积责任为背景制作一张热图,然后在此图中绘制热图上“X_测试”命中节点的散点图

但我希望散点图位于任何X_序列或任何X_测试的节点中心。。这就是我不知道该怎么做的

此代码的一些要点:

对于任何大小的X_test,映射的大小默认为16x16,但它可以设置为任何整数,因此映射可以是任何nxn

plt.pcolormesh需要np.historogram2d来获得添加了边的网格。但我不喜欢使用np.historogram2d,因为我需要通过“bins”参数来正确调整热图,我怀疑这可能会导致我找到一些错误的地图或散射

对于热图,np.meshgrid为我提供了一个meshgrid,但是没有边,所以我不能将其与pcolormesh一起使用

使用plt.imshow使用np.meshgrid绘制热图的方法似乎更可靠。但我不知道如何将一维数组“节点累积责任”转换为256x256数组

我想做的一个非常类似的例子是:


我将使用
plt.imshow
,对于您提到的最后一点,使用
重塑
可以解决问题吗?另外,请在示例代码中使用一些玩具数据,这使得其他易于帮助您:)