import numpy as np
import matplotlib
import matplotlib.pyplot as pltvegetables = ["cucumber", "tomato", "lettuce", "asparagus","potato", "wheat", "barley"]
#蔬菜类
farmers = ["Farmer Joe", "Upland Bros.", "Smith Gardening","Agrifun", "Organiculture", "BioGoods Ltd.", "Cornylee Corp."]
#农民类harvest = np.array([[0.8, 2.4, 2.5, 3.9, 0.0, 4.0, 0.0],[2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0],[1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0],[0.6, 0.0, 0.3, 0.0, 3.1, 0.0, 0.0],[0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0],[1.3, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1],[0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]])
#定义热力图数据fig, ax = plt.subplots()
#将元组分解为fig和ax两个变量
im = ax.imshow(harvest)
#显示图片ax.set_xticks(np.arange(len(farmers)))
#设置x轴刻度间隔
ax.set_yticks(np.arange(len(vegetables)))
#设置y轴刻度间隔
ax.set_xticklabels(farmers)
#设置x轴标签'''
ax.set_yticklabels(vegetables)
#设置y轴标签'''plt.setp(ax.get_xticklabels(), rotation=45, ha="right",rotation_mode="anchor")
#设置标签 旋转45度 ha有三个选择:right,center,left(对齐方式)for i in range(len(vegetables)):for j in range(len(farmers)):text = ax.text(j, i, harvest[i, j],ha="center", va="center", color="w")
'''
画图
j,i:表示坐标值上的值
harvest[i, j]表示内容
ha有三个选择:right,center,left(对齐方式)
va有四个选择:'top', 'bottom', 'center', 'baseline'(对齐方式)
color:设置颜色
'''ax.set_title("Harvest of local farmers (in tons/year)")
#设置题目
fig.tight_layout()  #自动调整子图参数,使之填充整个图像区域。
plt.show()      #图像展示

def heatmap(data, row_labels, col_labels, ax=None,cbar_kw={}, cbarlabel="", **kwargs):"""从一个numpy数组和两个标签列表创建一个热图。data形状为(N,M)的2D numpy数组。row_labels长度为N且带有行标签的列表或数组。col_labels长度为M的列表或数组,带有列的标签。ax绘制热图的`matplotlib.axes.Axes`实例。 如果未提供,请使用当前轴或创建一个新轴。 (可选的。)cbar_kw带有`matplotlib.Figure.colorbar`参数的字典。 可选的。cbarlabel颜色条的标签。 可选的。**kwargs所有其他参数都转发给“imshow”。"""if not ax:ax = plt.gca()#如果不在ax,挪动坐标轴im = ax.imshow(data, **kwargs)#画图#创造彩条cbar = ax.figure.colorbar(im, ax=ax, **cbar_kw)'''im:一个可以映射颜色的对象ax=ax:指示im得到的对象在哪里展示(整体)'''cbar.ax.set_ylabel(cbarlabel, rotation=-90, va="bottom")'''设置y轴标签'''ax.set_xticks(np.arange(data.shape[1]))ax.set_yticks(np.arange(data.shape[0]))#设置x,y轴刻度间隔ax.set_xticklabels(col_labels)ax.set_yticklabels(row_labels)#设置横,纵轴#让水平轴标签显示在顶部ax.tick_params(top=True, bottom=False,labeltop=True, labelbottom=False)#旋转刻度线标签并设置其对齐方式。plt.setp(ax.get_xticklabels(), rotation=-30, ha="right",rotation_mode="anchor")#关闭spines并创建白色网格。#spines是连接轴刻度标记的线,而且标明了数据区域的边界for edge, spine in ax.spines.items():spine.set_visible(False)ax.set_xticks(np.arange(data.shape[1]+1)-.5, minor=True)ax.set_yticks(np.arange(data.shape[0]+1)-.5, minor=True)##设置x,y轴刻度间隔ax.grid(which="minor", color="w", linestyle='-', linewidth=3)#设置边框主刻度线,颜色为白色,线条格式为'-',线的宽度为3ax.tick_params(which="minor", bottom=False, left=False)#设置主刻度线,参数bottom, top, left, right的值为布尔值,分别代表设置绘图区四个边框线上的的刻度线是否显示return im, cbardef annotate_heatmap(im, data=None, valfmt="{x:.2f}",textcolors=["black", "white"],threshold=None, **textkw):'''im要标记的AxesImage。data用于注释的数据。 如果为None,则使用图像数据。 (可选的。)valfmt热图内注释的格式。 这应该使用字符串格式方法,例如 “ $ {x:.2f}”,或成为`matplotlib.ticker.Formatter`。 (可选的。)textcolors两种颜色规格的列表或数组。 第一个代表值低于阈值,第二个代表高于阈值的值。 (可选的。)threshold以数据单位表示的值,根据该值,textcolors中的颜色是应用。 如果为None(默认),则将颜色图的中间用作分离。( 可选的。)**kwargs所有其他参数都转发给用于创建的每个`text`调用。文字标签。'''if not isinstance(data, (list, np.ndarray)):data = im.get_array()#保证data是一个list类型#将阈值标准化为图像颜色范围。if threshold is not None:threshold = im.norm(threshold)else:threshold = im.norm(data.max())/2.#将默认对齐方式设置为居中,但允许将其设置为居中#被textkw覆盖。kw = dict(horizontalalignment="center",verticalalignment="center")kw.update(textkw)#获取格式化程序(如果提供了字符串)if isinstance(valfmt, str):valfmt = matplotlib.ticker.StrMethodFormatter(valfmt)#给热力图标注文本设置格式#遍历数据并为每个“pixel”创建一个“Text”。#根据数据更改文本的颜色。texts = []for i in range(data.shape[0]):for j in range(data.shape[1]):kw.update(color=textcolors[int(im.norm(data[i, j]) > threshold)])text = im.axes.text(j, i, valfmt(data[i, j], None), **kw)texts.append(text)return texts
fig, ax = plt.subplots()
#将元组分解为fig和ax两个变量 im, cbar = heatmap(harvest, vegetables, farmers, ax=ax,cmap="YlGn", cbarlabel="harvest [t/year]")
"""从一个numpy数组和两个标签列表创建一个热图。data形状为(N,M)的2D numpy数组。row_labels长度为N且带有行标签的列表或数组。col_labels长度为M的列表或数组,带有列的标签。ax绘制热图的`matplotlib.axes.Axes`实例。 如果未提供,请使用当前轴或创建一个新轴。 (可选的。)cbar_kw带有`matplotlib.Figure.colorbar`参数的字典。 可选的。cbarlabel颜色条的标签。 可选的。**kwargs所有其他参数都转发给“imshow”。
"""
texts = annotate_heatmap(im, valfmt="{x:.1f} t")
'''im要标记的AxesImage。data用于注释的数据。 如果为None,则使用图像数据。 (可选的。)valfmt热图内注释的格式。 这应该使用字符串格式方法,例如 “ $ {x:.2f}”,或成为`matplotlib.ticker.Formatter`。 (可选的。)textcolors两种颜色规格的列表或数组。 第一个代表值低于阈值,第二个代表高于阈值的值。 (可选的。)threshold以数据单位表示的值,根据该值,textcolors中的颜色是应用。 如果为None(默认),则将颜色图的中间用作分离。( 可选的。)**kwargs所有其他参数都转发给用于创建的每个`text`调用。文字标签。'''fig.tight_layout()  #自动调整子图参数,使之填充整个图像区域。
plt.show()      #图像展示

np.random.seed(19680801)fig, ((ax, ax2), (ax3, ax4)) = plt.subplots(2, 2, figsize=(8, 6))#使用不同的字体大小和颜色图复制上面的示例。im, _ = heatmap(harvest, vegetables, farmers, ax=ax,cmap="Wistia", cbarlabel="harvest [t/year]")
annotate_heatmap(im, valfmt="{x:.1f}", size=7)#创建一些新数据,为imshow(vmin)提供更多参数,
#在注释上使用整数格式,并提供一些颜色。
data = np.random.randint(2, 100, size=(7, 7))
y = ["Book {}".format(i) for i in range(1, 8)]
x = ["Store {}".format(i) for i in list("ABCDEFG")]
im, _ = heatmap(data, y, x, ax=ax2, vmin=0,cmap="magma_r", cbarlabel="weekly sold copies")
annotate_heatmap(im, valfmt="{x:d}", size=7, threshold=20,textcolors=["red", "white"])#有时甚至数据本身也是分类的。 在这里我们使用
#:class:`matplotlib.colors.BoundaryNorm`将数据放入类中
#并使用它为图着色,也可以获取类
#来自一组类的标签。
data = np.random.randn(6, 6)
y = ["Prod. {}".format(i) for i in range(10, 70, 10)]
x = ["Cycle {}".format(i) for i in range(1, 7)]qrates = np.array(list("ABCDEFG"))
norm = matplotlib.colors.BoundaryNorm(np.linspace(-3.5, 3.5, 8), 7)
fmt = matplotlib.ticker.FuncFormatter(lambda x, pos: qrates[::-1][norm(x)])im, _ = heatmap(data, y, x, ax=ax3,cmap=plt.get_cmap("PiYG", 7), norm=norm,cbar_kw=dict(ticks=np.arange(-3, 4), format=fmt),cbarlabel="Quality Rating")annotate_heatmap(im, valfmt=fmt, size=9, fontweight="bold", threshold=-1,textcolors=["red", "black"])#我们可以很好地绘制一个相关矩阵。 由于这受-1和1约束,
#我们将它们用作vmin和vmax。 我们可能还会删除前导零并隐藏
#通过使用a对角元素(全为1)
#:class:`matplotlib.ticker.FuncFormatter`.corr_matrix = np.corrcoef(np.random.rand(6, 5))
im, _ = heatmap(corr_matrix, vegetables, vegetables, ax=ax4,cmap="PuOr", vmin=-1, vmax=1,cbarlabel="correlation coeff.")def func(x, pos):return "{:.2f}".format(x).replace("0.", ".").replace("1.00", "")annotate_heatmap(im, valfmt=matplotlib.ticker.FuncFormatter(func), size=7)plt.tight_layout()
plt.show()


于是就大功告成啦!

Matplotlib画热力图---heatmap(逐行注释)相关推荐

  1. python画热力图

    python中可使用seaborn.heatmap画热力图,官方文档在这 在分类任务中,也可用于画混淆矩阵: import numpy as np import seaborn as sns impo ...

  2. Matplotlib画各种图

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/kun1280437633/article/details/80841364 看本文前,请看matlp ...

  3. 数据可视化之使用Seaborn画热力图

    1.引言 热力图的想法很简单,用颜色替换数字. 现在,这种可视化风格已经从最初的颜色编码表格走了很长一段路.热力图被广泛用于地理空间数据.这种图通常用于描述变量的密度或强度,模式可视化.方差甚至异常可 ...

  4. python画饼图程序_python使用matplotlib画饼状图

    本文实例为大家分享了python使用matplotlib画饼状图的具体代码,供大家参考,具体内容如下 代码与详细注释 from matplotlib import pyplot as plt #调节图 ...

  5. python画柱状图-python使用matplotlib画柱状图、散点图

    本文实例为大家分享了python使用matplotlib画柱状图.散点图的具体代码,供大家参考,具体内容如下 柱状图(plt.bar) 代码与注释 import numpy as np from ma ...

  6. matlab如何绘制相关系数热力图,相关系数矩阵与热力图heatmap

    相关系数矩阵与热力图heatmap import numpy as np import pandas as pd import matplotlib.pyplot as plt import seab ...

  7. 在Arcgis地图上绘制Echarts热力图(Heatmap)

    在Arcgis地图上绘制Echarts热力图(Heatmap) 2018-08-30 10:18 [原创]本文地址:https://www.cnblogs.com/qiaoge0923/p/95623 ...

  8. python用matplotlib画球_用Python的Matplotlib 画一个足球场

    我们可能想要在图表上绘制线条或圆圈的原因有很多. 我们可以寻找添加平均线,突出显示关键数据点甚至绘制图片. 本文将展示如何使用足球场地图的示例添加线条,圆圈和圆弧,然后可以使用它来显示热图,传球或比赛 ...

  9. python绘制时间序列图_python matplotlib 画dataframe的时间序列图实例

    python matplotlib 画dataframe的时间序列图实例 在python中经常会用到pandas来处理数据,最常用的数据类型是dataframe,但是有时候在dataframe有时间字 ...

  10. python 画三维函数图-如何用Matplotlib 画三维图的示例代码

    最基本的三维图是由(x, y, z)三维坐标点构成的线图与散点图,可以用ax.plot3D和ax.scatter3D函数来创建,默认情况下,散点会自动改变透明度,以在平面上呈现出立体感 三维的线图和散 ...

最新文章

  1. 5G 产业链重要投资节点
  2. 2016-1-4作业
  3. 429 too many requests错误出现在wordpress后台更新及官网的5种解决方法
  4. 在Java中将Double转换为Integer
  5. python 数据分析学什么-如何在业余时学数据分析?
  6. sklearn 岭回归
  7. 人工智能终于能像人类一样学习,并通过了图灵测试
  8. 数据结构与算法(C++)– 二叉查找树(Binary Search Tree )
  9. Java监听器Listener入门示例
  10. [Swift]LeetCode498. 对角线遍历 | Diagonal Traverse
  11. ajax ssm 页面跳转_SSM框架的面试常见问题
  12. 第二十二章:洗净皮衣
  13. mysql从5.1.63升级到5.6.20出现的问题
  14. 功能测试-测试定义与原则
  15. 全球 42 亿 IPv4 地址宣告耗尽!
  16. 泰语翻译软件隐私政策
  17. http://wang-min-zhao-sina-com.iteye.com/blog/1467204
  18. IWAM账号密码不一致引起IIS无法处理ASP文件
  19. 327 玉米田(状态压缩dp)
  20. mc服务器tps优化,[教程] 使用Openj9大幅降低MC的内存占用,提高FPS和TPS

热门文章

  1. 使用Python进行数据关联分析
  2. Visual Studio Code安装及设置
  3. ligerui父页面向子页面传值
  4. 集合 -- 如何安全删除 HashMap 中的元素
  5. Android萤石云视频缩放
  6. VMware虚拟机软件账号的注册问题
  7. 如何更改windows桌面图标,更改桌面图标方法
  8. Python计算机视觉实验五——针孔照相机模型
  9. 音乐外链php修复版源码
  10. 预装windows 8 系统GPT模式的ThinkPad T440改装64位 windows 7旗舰版