精华内容
下载资源
问答
  • python绘制热力图
    万次阅读
    2017-05-18 19:58:32

    Python绘制热力图

    reference

    目标:绘制如下的 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:21
    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=’...

    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/444175795

    seaborn自带数据集: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绘制热力图,并给出了其应用于展示数据之间相关性的案例供读者参考。

    效果图

    在这里插入图片描述

    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绘制热力图实例,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。具体代码如下:示例一:# -*- coding: utf-8 -*-from pyheatmap.heatmap import ...
  • 申请应用,获取ak*将地图转换为经纬度坐标方案一: [link](https://maplocation.sjfkai.com/)方案二:python List item *初始数据——地址 可以是任意格式的文本 *获取百度地图ak 1.百度地图开放平台——我的应用...
  • 主要为大家详细介绍了Python绘制中国大陆人口热力图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • sns.heatmap(ax = ax, data =...添加变量fmt=' ',就可以在上显示符号 默认变量fmt='.2g'只能显示数值 参考链接:seaborn热图批注值错误:'numpy.str_'类型的对象的未知格式代码“g” - 我爱学习网 (5axxw.com) ...
  • 利用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...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,767
精华内容 1,906
关键字:

python绘制热力图