【问题标题】:Python heatmaps from list of tuples来自元组列表的 Python 热图
【发布时间】:2020-05-21 03:25:09
【问题描述】:

我有一个看起来像这样的数据:

# X,Y,Value
(380.57721129859806, 625.4295833013282, 1610.7896478197865)
(595.9181549398772, -309.2877476992412, 2153.4213188808317)
(85.88733459241405, 652.1788114374065, 497.6607201161437)
(247.44098377595287, -619.5256146069361, 1283.9468394229907)
(-259.092425954383, -383.41841661290914, 1850.040750164471)
(-431.58095056080657, -385.88458762039073, 1697.8866748485123)
(-469.9205503612537, -631.0749916983557, 2062.3719844791462)
(538.9858923744944, -207.61857693940544, 2309.0439437122927)
(291.8537762055346, -332.97650146280097, 1095.5209433044436)
(-90.17989357135775, 253.36425453647644, 1347.6315490796333)

X,Y 的范围是 -700 到 700,value 的范围是 1 到 3000。 我想使用该数据来创建热图。这是我正在使用的代码:

from io import BytesIO
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np

import scipy.ndimage.filters as filters
from matplotlib.colors import LinearSegmentedColormap

if __name__ == "__main__":
    w = 760
    h = 760

    data = np.zeros(h * w)
    data = data.reshape((h, w))

    for x in range(120, 123):
        for y in range(120, 123):
            data[x][y] = 2674

    for x in range(100, 103):
        for y in range(100, 103):
            data[x][y] = 1000

    data = filters.gaussian_filter(data, sigma=15)

    c_map = plt.cm.get_cmap("jet")
    transparent_jet = c_map(np.arange(c_map.N))
    transparent_jet[:, -1] = np.linspace(0, 1, c_map.N)
    cm = LinearSegmentedColormap.from_list('transparent_jet', transparent_jet)

    img_map = Image.new("RGBA", (760, 760), color="black")
    tmp = BytesIO()
    plt.imsave(tmp, data, cmap=cm)
    tmp.seek(0)
    Image.Image.alpha_composite(img_map, Image.open(tmp))
    img_map.save("heatmap.png")


如何改用浮点 X、Y 和值?

【问题讨论】:

  • 你能用plt.scatter 用各自的颜色分散点吗?

标签: python numpy matplotlib scipy


【解决方案1】:

我只需要使用histogram2d

from io import BytesIO
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np

import scipy.ndimage.filters as filters
from matplotlib.colors import LinearSegmentedColormap

if __name__ == "__main__":
    c_map = plt.cm.get_cmap("jet")
    transparent_jet = c_map(np.arange(c_map.N))
    transparent_jet[:, -1] = np.linspace(0, 1, c_map.N)
    cm = LinearSegmentedColormap.from_list('transparent_jet', transparent_jet)

    h_x = np.random.uniform(-250, 250, 10000)
    h_y = np.random.uniform(-250, 250, 10000)
    h_w = np.random.uniform(1, 3000, 10000)

    h, _, _ = np.histogram2d(h_x, h_y, weights=h_w, bins=(500, 500))
    h = filters.gaussian_filter(h, sigma=6)

    img_map = Image.new("RGBA", (500, 500), color="black")
    tmp = BytesIO()
    plt.imsave(tmp, h, cmap=cm)
    tmp.seek(0)
    Image.Image.alpha_composite(img_map, Image.open(tmp))
    img_map.show()

结果图片:

【讨论】:

    猜你喜欢
    • 2021-11-01
    • 2020-11-25
    • 2013-08-29
    • 2021-12-19
    • 2020-03-13
    • 2020-10-27
    • 2018-10-25
    • 2019-08-13
    • 1970-01-01
    相关资源
    最近更新 更多