【发布时间】:2021-07-02 17:23:18
【问题描述】:
我想绘制一个热图,其中输入数据不在典型的矩形间隔网格中。以下是一些示例数据:
import numpy as np
xmin = 6
xmax= 12
ymin = 0
x = np.linspace(xmin, xmax, 100)
ymax = x**2
final = []
for i in range(len(ymax)):
yrange = np.linspace(0, ymax[i], 100)
for j in range(len(yrange)):
intensity = np.random.rand()
final.append([x[i], yrange[j], intensity])
data_for_plotting = np.asarray(final) # (10000, 3) shaped array
我想将强度(在颜色栏中)绘制为 (x,y) 的函数,它表示位置,我想在没有插值的情况下这样做。
这是我使用 matplotlib 的 griddata 和线性插值的解决方案。
import matplotlib.pyplot as plt
from matplotlib.mlab import griddata
total_length = 100
x1 = np.linspace(min(data_for_plotting[:,0]), max(data_for_plotting[:,0]), total_length)
y1 = np.linspace(min(data_for_plotting[:,1]), max(data_for_plotting[:,1]), total_length)
z1 = griddata(data_for_plotting[:,0], data_for_plotting[:,1], data_for_plotting[:,2], x1, y1, interp='linear')
p=plt.pcolormesh(x1, y1, z1, vmin = 0. , vmax=1.0, cmap='viridis')
clb = plt.colorbar(p)
plt.show()
我正在寻找一种无需插值的替代解决方案,因为我希望在我的 x 和 y 位置(像素大小/矩形)中看到最小的测量单位。根据上面给出的示例数据,我预计像素的高度会随着 x 的较大值而增加。
【问题讨论】:
标签: python-3.x matplotlib scipy seaborn heatmap