Python 绘制热图时对数据进行排序
我一直在尝试绘制一张热图,x轴上有一个时间跨度(以5分钟为增量),y轴上有一段在互联网上观看的视频 一切进展顺利,数据也很好。例如,数据集可能如下所示:Python 绘制热图时对数据进行排序,python,matplotlib,heatmap,Python,Matplotlib,Heatmap,我一直在尝试绘制一张热图,x轴上有一个时间跨度(以5分钟为增量),y轴上有一段在互联网上观看的视频 一切进展顺利,数据也很好。例如,数据集可能如下所示: [[0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], [0.5, 0.0, 0.0, 1.5, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0
[[0.5, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
[0.5, 0.0, 0.0, 1.5, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]]
这意味着有两行22列(0:00:00-1:45:00)
我正在使用此代码绘制热图:
def printheatmap(title,names,data):
data = np.array(data)
fig, ax = plt.subplots()
fig = plt.gcf()
fig.set_size_inches(8, 11)
heatmap = ax.pcolormesh(data, cmap=plt.cm.Blues, edgecolors='black')
ax.set_title(title)
ax.set_xticks(np.arange(data.shape[1])+0.5, minor=False)
ax.set_yticks(np.arange(data.shape[0])+0.5, minor=False)
ax.xaxis.tick_bottom()
ax.set_xticklabels(times, minor=False, weight='ultralight', rotation=40, ha='right')
ax.set_yticklabels(names, minor=False)
ax.grid(False)
plt.colorbar(heatmap)
plt.show()
但由于某些原因,第二行首先在热图中绘制:
def printheatmap(title,names,data):
data = np.array(data)
fig, ax = plt.subplots()
fig = plt.gcf()
fig.set_size_inches(8, 11)
heatmap = ax.pcolormesh(data, cmap=plt.cm.Blues, edgecolors='black')
ax.set_title(title)
ax.set_xticks(np.arange(data.shape[1])+0.5, minor=False)
ax.set_yticks(np.arange(data.shape[0])+0.5, minor=False)
ax.xaxis.tick_bottom()
ax.set_xticklabels(times, minor=False, weight='ultralight', rotation=40, ha='right')
ax.set_yticklabels(names, minor=False)
ax.grid(False)
plt.colorbar(heatmap)
plt.show()
如您所见,以(0.5;0;0;1.5)开头的标签位于图表顶部,标签正确。是否有任何方法可以“保留”我正在手动进行的排序
y轴没有反转。对于较大的数据集,绘图似乎完全随机(但显然,最高分数在底部),而最后一行应该是:
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0].
这是另一张照片。我按日期对数据集进行了排序,但它只是将其置乱:
编辑:修正了。显然,使用自定义XPath函数对数据进行排序并不能很好地与matplotlib配合使用。手动排序似乎可以做到这一点。使用列表切片来反转数据:
data = np.array(data[::-1])
或反转Y轴:
ax.invert_yaxis()
看起来Y轴不是倒的。数据集越大,数据的混乱程度就越高,似乎将总数最高的数据放在了底部。请看我编辑的帖子。@MatsWillemsen实际上我知道你说的“排序”是什么意思,你显示的样本数据没有排序,是吗?事实上是这样。按日期排序(不包括在数据中);但我现在把它修好了!如上所示。@MatsWillemsen,那么当反转yaxis时什么是“混乱的”?哦,我的道歉。反转y轴不会使数据更加混乱,但这是我必须做的事情,以使其符合我的要求。非常感谢!