在绘制热图时对数据进行排序

时间:2014-02-09 12:10:09

标签: 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.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()

但出于某种原因,第二行首先在热图中绘制:

enter image description here

如您所见,以(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].

enter image description here

这是另一张照片。我按日期对数据集进行了排序,但它只是将其加密:

enter image description here

编辑:修正了它。显然使用自定义XPath函数来对数据进行排序并不能很好地与matplotlib一起使用。手动排序似乎可以解决问题。

1 个答案:

答案 0 :(得分:2)

使用列表切片来反转您的数据:

data = np.array(data[::-1])

或反转Y轴:

ax.invert_yaxis()