【问题标题】:Plotting a heat map of discrete values in python在 python 中绘制离散值的热图
【发布时间】:2015-08-18 19:59:31
【问题描述】:

我有几个相关的问题:

1) 我想知道是否有办法在 python 中制作离散值的热图,类似于给出的示例 here

创建热图后,我需要一些额外的控件:

2) 控制行和列标签的数量。假设,我有两个变量 x 和 y,其中 0

from __future__ import division
import bumpy as np
    def f(x,y):
        ### Compute the value of f for a given x and y. The output value will be 1, 2 or 3 ###
        f = np.random.randint(1,4)

    data = {}
    for x in [i/100 for i in range(101)]
        for y in [i/100 for i in range(101)]
            data[(x,y)] = f(x,y)

现在,我有一个 100x100 的数据矩阵,我将为其制作热图。如果我想在热图上显示行和列标签,每行和每列将显示 100 个点 (0, 0.01, 0.02, ..., 1),这会使图形过于拥挤。我想确定每个轴上的增量,例如,如果增量是 0.2,那么行和列标签应该是 0、0.2、0.4、0.6、0.8 和 1。虽然这对于折线图很容易做到,但我想知道是否可以将相同的东西应用于热图。

3) 控制标签的字体大小和外观。

4) 为水平轴和垂直轴添加网格线。

【问题讨论】:

    标签: python heatmap


    【解决方案1】:

    seaborn 尝试heatmap

    要实际存储表格数据,我不会使用字典。列表列表会更好,但最好的方法是使用NumPy arrays(另见:numpy - evaluate function on a grid of points)。

    import numpy as np
    import pandas as pd
    import seaborn as sns
    
    X = np.linspace(0, 1, 101)
    Y = np.linspace(0, 1, 101)
    
    data = np.zeros((101, 101))
    
    # or use meshgrid instead
    for i, x in enumerate(X):
        for j, y in enumerate(Y):
            data[i, j] = some_function(x, y)
    
    df = pd.DataFrame(data, index=Y, columns=X)
    
    sns.heatmap(df)
    

    或者,您可以使用imshow(请参阅:imshow when you are plotting data, not images. Realtion between aspect and extent?) - 然后它只会在轴上显示一些刻度。

    【讨论】:

    • seaborn 的热图似乎能够完成我需要的大部分工作,但我很难弄清楚如何分辨热图的使用,例如,绿色表示 1,黄色表示 2,3 表示红色并显示颜色栏中的这些标签(类似于我之前给出的链接中 ggplot2 的示例)。我遇到的另一个问题是垂直轴的标签从顶部的 0.00 和底部的 1.00 开始。我怎样才能颠倒这个顺序(即,在底部显示 0.00,在顶部显示 1.00,就像线性图一样)?
    • @user3076813 对于颜色 - 它使用 cmap 参数 - 搜索如何制作离散值。
    • 我让彩条工作,但我必须使用 matshow(不是 sns.heatmap)。我现在唯一的问题是我想在网格线中间获取 xtick 和 ytick 标签(类似于 sns.heatmap)。 Ticklables 通过 matshow 正确放置在中心,但网格线总是从 ticklabels 所在的位置绘制。我怎样才能让它们被放置在发痒的两侧?我检查了这篇文章:stackoverflow.com/questions/24190858/…。第一种方法不适用于 matshow,第二种方法仅适用于次要网格线。
    猜你喜欢
    • 2018-10-31
    • 1970-01-01
    • 2011-02-05
    • 2017-06-17
    • 2017-07-20
    • 2022-01-21
    • 2017-04-12
    • 2016-12-14
    • 1970-01-01
    相关资源
    最近更新 更多