我一直试图在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.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()
但出于某种原因,第二行首先在热图中绘制:
如您所见,以(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一起使用。手动排序似乎可以解决问题。
答案 0 :(得分:2)
使用列表切片来反转您的数据:
data = np.array(data[::-1])
或反转Y轴:
ax.invert_yaxis()