使用matplotlib的pyplot在每个单元格中使用文本进行热图

Fra*_*urt 5 matplotlib heatmap

我使用matplotlib.pyplot.pcolor()来绘制matplotlib的热图:

在此输入图像描述

import numpy as np
import matplotlib.pyplot as plt    

def heatmap(data, title, xlabel, ylabel):
    plt.figure()
    plt.title(title)
    plt.xlabel(xlabel)
    plt.ylabel(ylabel)
    c = plt.pcolor(data, edgecolors='k', linewidths=4, cmap='RdBu', vmin=0.0, vmax=1.0)
    plt.colorbar(c)

def main():
    title = "ROC's AUC"
    xlabel= "Timeshift"
    ylabel="Scales"
    data =  np.random.rand(8,12)
    heatmap(data, title, xlabel, ylabel)
    plt.show()

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

有没有办法在每个单元格中添加相应的值,例如:

(来自Matlab的可定制热图)

在此输入图像描述

(%我现在的申请不需要额外的,但我很想知道未来)

Fra*_*urt 8

您可以使用Seaborn,这是一个基于matplotlib的Python可视化库,它提供了一个高级界面,用于绘制有吸引力的统计图形.

热图示例:

import seaborn as sns
sns.set()

flights_long = sns.load_dataset("flights")
flights = flights_long.pivot("month", "year", "passengers")

sns.heatmap(flights, annot=True, fmt="d")

# To display the heatmap 
import matplotlib.pyplot as plt
plt.show()

# To save the heatmap as a file:
fig = heatmap.get_figure()
fig.savefig('heatmap.pdf')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

文档:https://seaborn.pydata.org/generated/seaborn.heatmap.html


HYR*_*YRY 7

你需要通过调用添加所有文本axes.text(),这是一个例子:

import numpy as np
import matplotlib.pyplot as plt    

title = "ROC's AUC"
xlabel= "Timeshift"
ylabel="Scales"
data =  np.random.rand(8,12)


plt.figure(figsize=(12, 6))
plt.title(title)
plt.xlabel(xlabel)
plt.ylabel(ylabel)
c = plt.pcolor(data, edgecolors='k', linewidths=4, cmap='RdBu', vmin=0.0, vmax=1.0)

def show_values(pc, fmt="%.2f", **kw):
    from itertools import izip
    pc.update_scalarmappable()
    ax = pc.get_axes()
    for p, color, value in izip(pc.get_paths(), pc.get_facecolors(), pc.get_array()):
        x, y = p.vertices[:-2, :].mean(0)
        if np.all(color[:3] > 0.5):
            color = (0.0, 0.0, 0.0)
        else:
            color = (1.0, 1.0, 1.0)
        ax.text(x, y, fmt % value, ha="center", va="center", color=color, **kw)

show_values(c)

plt.colorbar(c)
Run Code Online (Sandbox Code Playgroud)

输出:

在此输入图像描述