-
2017-05-18 19:58:32
Python绘制热力图
目标:绘制如下的 hotmap 或者 density-map ,把坐标和hot-value或者density-value替换为自己的数据,稍微改进就可以绘制相当不错的热力图(密度图)。
import matplotlib.pyplot as plt import matplotlib.cm as cm from matplotlib.colors import LogNorm import numpy as np x, y = np.random.rand(10), np.random.rand(10) z = (np.random.rand(9000000)+np.linspace(0,1, 9000000)).reshape(3000, 3000) plt.imshow(z+10, extent=(np.amin(x), np.amax(x), np.amin(y), np.amax(y)), cmap=cm.hot, norm=LogNorm()) plt.colorbar() plt.show()
更多相关内容 -
Python绘制热力图示例
2020-12-31 16:42:10本文实例讲述了Python绘制热力图操作。分享给大家供大家参考,具体如下: 示例一: # -*- coding: utf-8 -*- from pyheatmap.heatmap import HeatMap import numpy as np N = 10000 X = np.random.rand(N) * 255 # ... -
python绘制热力图
2022-03-23 16:01:211.seaborn 绘制热力图 官方说明:https://seaborn.pydata.org/generated/seaborn.heatmap.html 语法: seaborn.heatmap(data, *, vmin=None, vmax=None, cmap=None, center=None, robust=False, annot=None, fmt=’...1.seaborn 绘制热力图
官方说明:https://seaborn.pydata.org/generated/seaborn.heatmap.html语法:
seaborn.heatmap(data, *, vmin=None, vmax=None, cmap=None, center=None, robust=False, annot=None, fmt=‘.2g’, annot_kws=None, linewidths=0, linecolor=‘white’, cbar=True, cbar_kws=None, cbar_ax=None, square=False, xticklabels=‘auto’, yticklabels=‘auto’, mask=None, ax=None, **kwargs)
具体参数见:https://www.cnblogs.com/XiaoJ-cs/p/15159834.html
- data:矩阵数据集,可以使numpy的数组(array),如果是pandas的dataframe,则df的index/column信息会分别对应到heatmap的columns和rows;dataframe可以用df.pivot(index=‘1’, columns=‘2’, values=‘3’);
- linewidths,热力图矩阵之间的间隔大小;
- vmax,vmin, 图例中最大值和最小值的显示值,没有该参数时默认不显示。
- fmt,格式设置,决定annot注释的数字格式,小数点后几位等;
- cbar : 是否画一个颜色条,是否在热力图侧边绘制颜色刻度条,默认值是True;
- cbar_kws : 颜色条的参数,相关字体设置,默认值是None;
- cbar_ax:热力图侧边绘制颜色刻度条时,刻度条位置设置,默认值是None;
- square:设置热力图矩阵小块形状。
实例:
https://www.statology.org/seaborn-heatmap/#import seaborn import seaborn as sns #load "flights" dataset data = sns.load_dataset("flights") data = data.pivot("month", "year", "passengers") sns.heatmap(data)
flights数据结构:
经过重塑数据格式变为(df.pivot):
heatmap:
2.用dataframe格式数据绘制热力图
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # load the sample data df = pd.DataFrame({'MutProb': [0.1, 0.05, 0.01, 0.005, 0.001, 0.1, 0.05, 0.01, 0.005, 0.001, 0.1, 0.05, 0.01, 0.005, 0.001, 0.1, 0.05, 0.01, 0.005, 0.001, 0.1, 0.05, 0.01, 0.005, 0.001], 'SymmetricDivision': [1.0, 1.0, 1.0, 1.0, 1.0, 0.8, 0.8, 0.8, 0.8, 0.8, 0.6, 0.6, 0.6, 0.6, 0.6, 0.4, 0.4, 0.4, 0.4, 0.4, 0.2, 0.2, 0.2, 0.2, 0.2], 'test': ['sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule', 'sackin_yule'], 'value': [-4.1808639999999997, -9.1753490000000006, -11.408113999999999, -10.50245, -8.0274750000000008, -0.72260200000000008, -6.9963940000000004, -10.536339999999999, -9.5440649999999998, -7.1964070000000007, -0.39225599999999999, -6.6216390000000001, -9.5518009999999993, -9.2924690000000005, -6.7605589999999998, -0.65214700000000003, -6.8852289999999989, -9.4557760000000002, -8.9364629999999998, -6.4736289999999999, -0.96481800000000006, -6.051482, -9.7846860000000007, -8.5710630000000005, -6.1461209999999999]}) # pivot the dataframe from long to wide form result = df.pivot(index='SymmetricDivision', columns='MutProb', values='value') sns.heatmap(result, annot=True, fmt="g", cmap='viridis') plt.show()
df.pivot函数:用来重塑数据的函数,构造透视表
pivot(index=None, columns=None, values=None)
- index: 可选参数。设置新dataframe的行索引,如果未指明,就用当前已存在的行索引。
- columns:必选参数。用来设置作为新dataframe的列索引。
- values:可选参数。在原dataframe中选中某一列/几列的值,使其在新dataframe的列里显示。如果不指定,则默认将原dataframe中所有的列都显示,这里需要注意:为了将所有的值都显示出来,就会出现多层行索引的情况。
在使用df.pivot函数时报错:
报错原因:
index和columns同时有相同的值。
解决方法:
删除相同行或合并相同行。
或参考这篇文章的方法:df1.reset_index().pivot_table(values=3, index=[0, 1], columns=2, aggfunc='mean')
3.优化热力图
可参考这篇文章:https://zhuanlan.zhihu.com/p/444175795
(1)设置y轴刻度df[u'a'] = df[u'a'].apply(lambda x: format(x, '.2f'))#保留两位小数
(2)seaborn.heatmap刻度及标签设置
https://www.cnblogs.com/IvanSSSS/p/12586578.html(3)设置color bar
import pandas as pd data = pd.DataFrame({'x':(1,2,3,4),'y':(1,2,3,4),'z':(14,15,23,2)}) sns.heatmap(data.pivot_table(index='y', columns="x", values="z")) ax = sns.heatmap(data.pivot_table(index='y', columns="x", values="z")) ax.collections[0].colorbar.set_label("Hello")
或直接设置其属性信息:
sns.heatmap(data.pivot_table(index='y', columns="x", values="z"), cbar_kws={'label': 'colorbar title'})
4.整体测试代码和结果
import os import numpy as np import seaborn as sns import pandas as pd import matplotlib.pyplot as plt import seaborn as sb from pylab import mpl from matplotlib.ticker import MultipleLocator, FormatStrFormatter #test df = pd.read_excel(r'./heatmap_data1.xlsx') df[u'Latitude'] = df[u'Latitude'].apply(lambda x: format(x, '.1f')) df = df.reset_index().pivot_table("values", "Latitude", "Year") mpl.rcParams['font.family'] = 'sans-serif' mpl.rcParams['font.sans-serif'] = 'NSimSun,Times New Roman' font = {'family': 'sans-serif', 'color': 'k', 'weight': 'normal', 'size': 20,} fig, ax = plt.subplots(figsize=(12, 10)) cmap = sb.diverging_palette(0, 230, 90, 60, as_cmap=True) sns.heatmap(df, annot = False, fmt= ".2f", cmap = cmap, vmin=-5, vmax=5, cbar_kws={"shrink": .8,"orientation": "horizontal"}, linewidths = 0, xticklabels=2, yticklabels=8) plt.xlabel('Year',fontsize=20, color='k') plt.ylabel('Latitude',fontsize=20, color='k') plt.xticks(fontsize=20) plt.yticks(fontsize=20,rotation=-360) cax = plt.gcf().axes[-1] cax.tick_params(labelsize=20) cbar = ax.collections[0].colorbar cbar.set_label(r'values',fontdict=font) plt.show()
还需要继续优化,后面继续修改~更新:
(1)修改colorbar:cbar_kws={"shrink": 1,'extend':'both'}
参考资料:
https://zhuanlan.zhihu.com/p/444175795seaborn自带数据集:https://github.com/mwaskom/seaborn-data
绘制热力图seaborn.heatmap,cmap设置颜色的参数:https://blog.csdn.net/ztf312/article/details/102474190
热力图很好的例子:https://blog.csdn.net/bai_bai123/article/details/114456610
-
python绘制热力图heatmap
2020-09-19 23:40:21主要为大家详细介绍了python绘制热力图heatmap,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
Python绘制热力图
2020-03-19 17:24:34最近研究需要用热力图表示矩阵,就顺便学习了一下,这里主要总结一下常用的颜色,方便查询。 首先,直接来代码 pathname = "(自己的文件目录)" fp = open(pathname, "rb") x = pickle.load(fp) # x表示当前的矩阵 ...最近研究需要用热力图表示矩阵,就顺便学习了一下,这里主要总结一下常用的颜色,方便查询。
首先,直接来代码
pathname = "(自己的文件目录)" fp = open(pathname, "rb") x = pickle.load(fp) # x表示当前的矩阵 sns.set() ax = sns.heatmap(x, cmap="rainbow") # cmap是热力图颜色的参数 plt.show()
看一下绘制的热力图结果:
下来就总结一下热力图的颜色了(替换代码中cmap参数的内容)
-
可视化篇(五)——— python绘制热力图及案例
2021-01-27 21:04:59可视化篇(五)——— python绘制热力图及案例摘要效果图python代码 摘要 本文演示了如何通过python绘制热力图,并给出了其应用于展示数据之间相关性的案例供读者参考。 效果图 python代码 from matplotlib import ...摘要
本文演示了如何通过python绘制热力图,并给出了其应用于展示数据之间相关性的案例供读者参考。
效果图
python代码
from matplotlib import font_manager import matplotlib import matplotlib.pyplot as plt import numpy as np import pandas as pd class CyrusPlot(object): def __init__(self,dpi=72,fig_size=[30,20]): """ 实列化该类,然后直接调用cyrus_heat_map方法 :param dpi: :param fig_size: """ self.dpi = dpi self.fig_size = fig_size self.font = font_manager.FontProperties(fname="C:\Windows\Fonts\simhei.ttf", size=30) def cyrus_heat_map(self,datas,x_ticks = [],y_ticks = [],bar_label = "bar label",show = True,save_name = ""): figure = plt.figure(figsize=self.fig_size, dpi=self.dpi) ax = figure.add_subplot(111) if not x_ticks: x_ticks = ["x"+str(i) for i in range(datas.shape[1])] y_ticks = ["y" + str(i) for i in range(datas.shape[0])] im, _ = self.heatmap(np.array(datas), x_ticks, y_ticks, cmap="RdBu", cbarlabel=bar_label,ax=ax) # plt.cm.RdBu PuOr self.annotate_heatmap(im, valfmt="{x:.2f}", size=16) if save_name: plt.savefig("./figure/" + save_name + ".jpg") if show: plt.show() def heatmap(self,data, row_labels, col_labels, ax=None, cbar_kw={}, cbarlabel="", **kwargs): if not ax: ax = plt.gca() im = ax.imshow(data, **kwargs) cbar = ax.figure.colorbar(im, ax=ax, **cbar_kw) cbar.ax.set_ylabel(cbarlabel, rotation=-90, va="bottom",fontproperties=font_manager.FontProperties(fname="C:\Windows\Fonts\simhei.ttf", size=30)) ax.set_xticks(np.arange(data.shape[1])) ax.set_yticks(np.arange(data.shape[0])) ax.set_xticklabels(col_labels,fontproperties=self.font) ax.set_yticklabels(row_labels,fontproperties=self.font) ax.tick_params(top=True, bottom=False, labeltop=True, labelbottom=False) plt.setp(ax.get_xticklabels(), rotation=-30, ha="right", rotation_mode="anchor") 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) ax.grid(which="minor", color="w", linestyle='-', linewidth=3) ax.tick_params(which="minor", bottom=False, left=False) return im, cbar def annotate_heatmap(self,im, data=None, valfmt="{x:.2f}", textcolors=("black", "white"), threshold=None, **textkw): if not isinstance(data, (list, np.ndarray)): data = im.get_array() if threshold is not None: threshold = im.norm(threshold) else: threshold = im.norm(data.max()) / 2. kw = dict(horizontalalignment="center", verticalalignment="center", ) kw.update(textkw) if isinstance(valfmt, str): valfmt = matplotlib.ticker.StrMethodFormatter(valfmt) texts = [] for i in range(data.shape[0]): for j in range(data.shape[1]): kw.update(color=textcolors[abs(data[i, j]) > 0.5]) text = im.axes.text(j, i, valfmt(data[i, j], None), **kw) texts.append(text) return texts
实列化该类,然后直接调用cyrus_heat_map方法。
if __name__ == '__main__': # 构造数据集并计算其pearson相关系数 data = pd.DataFrame(np.random.randn(10,10)) pearson = data.corr() plot_tool = CyrusPlot() plot_tool.cyrus_heat_map(pearson,show=True)
by CyrusMay 2021 01 27
看过多少脸庞
飞过多少异乡
少年早已苍茫
少年早已苍茫
回头望
回头望
我在何方
——————五月天(成名在望)—————— -
Python如何绘制热力图 Python绘制热力图实例
2020-11-23 19:55:07本篇文章小编给大家分享一下Python绘制热力图实例,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。具体代码如下:示例一:# -*- coding: utf-8 -*-from pyheatmap.heatmap import ... -
使用python绘制热力图(调用百度地图API)
2020-07-22 22:21:56申请应用,获取ak*将地图转换为经纬度坐标方案一: [link](https://maplocation.sjfkai.com/)方案二:python List item *初始数据——地址 可以是任意格式的文本 *获取百度地图ak 1.百度地图开放平台——我的应用... -
python绘制中国大陆人口热力图
2020-09-19 23:33:38主要为大家详细介绍了Python绘制中国大陆人口热力图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
python绘制热力图标注符号
2022-05-27 22:13:47sns.heatmap(ax = ax, data =...添加变量fmt=' ',就可以在图上显示符号 默认变量fmt='.2g'只能显示数值 参考链接:seaborn热图批注值错误:'numpy.str_'类型的对象的未知格式代码“g” - 我爱学习网 (5axxw.com) ... -
python pyheatmap包绘制热力图
2020-12-23 20:34:53利用python pyheatmap包绘制热力图,供大家参考,具体内容如下 import matplotlib.pyplot as plt from pyheatmap.heatmap import HeatMap def plot_data(filename): with open(filename,'r') as fh: data=fh.read... -
python 绘制 热力图 heatmap
2020-02-26 21:26:09# 使用掩码,绘制部分数据 corr = np.corrcoef(np.random.randn(10, 200)) mask = np.zeros_like(corr) mask[np.triu_indices_from(mask)] = True with sns.axes_style("white"): ax = sns.heatmap(corr, mask=mask...