【发布时间】: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")
【问题讨论】:
-
你能用
plt.scatter用各自的颜色分散点吗?
标签: python numpy matplotlib scipy