che*_*998 5 python interpolation matplotlib heatmap colormap
我需要在 python 中创建“热图”或“颜色图”。我有三个Python列表,即:X_COORDINATE、Z_COORDINATE和C_I。X_COORDINATE 和 Z_COORDINATE 列表包含我具有特定数据点的 x 和 z 坐标(存储在 C_I 列表中)。C_I 列表包含我需要在相应坐标处绘制到 xz 网格上的值。
热图/颜色图需要在已知且包含在 C_I 列表中的点之间进行插值,以使地图平滑,而不是正方形块。我无法共享代码或源数据,因为这是敏感的。但是,为了了解如何对这些映射之一进行编码,请假设:
X = [1.1, 1.5, 2.0, 3.0, 4.0, 5.0, 1.1, 1.5, 2.0, 3.0, 4.0, 5.0, 1.1, 1.5, 2.0, 3.0, 4.0, 5.0, 0.0, 0.5, 1.0, 1.1, 1.5, 2.0, 3.0, 4.0, 5.0, 0.0, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0]
Z = [0, 0, 0, 0, 0, 0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 1, 1, 1, 1, 1, 1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5]
C_I = [1.02414267447743, 0.210700871073941, 0.156586042435711, 0.109151033138569, 0.2279728779957, 0.204768257586954, 1.09037445301743, 0.287155868433615, 0.211257395413685, 0.132554129593619, 0.0900680495011601, 0.194608837248807, 1.34397119257655, 0.1201882143371, 0.17555070608144, 0.127220190160657, 0.204384526301353, 0.197414938747342, 0.195583977408476, 0.148150828086297, 0.183751866814816, 0.134858902076203, 0.183027629350907, 0.180267135381046, 0.0876356087026242, 0.183285092770786, 0.165502978081942, 0.0487725567447014, 0.172053559692846, 0.142204671797215, 0.166163224221791, 0.249334486033046, 0.150888488422605, 0.259452257883415]
Run Code Online (Sandbox Code Playgroud)
因此,X_COORDINATE 列表中的第 0 个元素是第一个数据点的 x 坐标,Z_COORDINATE 列表中的第 0 个元素是第一个数据点的 z 坐标,C_I 列表中的第 0 个元素是必须为的值。为第一点绘制。
我希望 X 轴上有 X_COORDINATE,z 轴上有 Z_COORDINATE,地图内部由相应的 C_I 值着色。需要明确的是,我希望地图与以下附图类似;尽管我希望存在 X 轴和 Z 轴刻度以及相关的颜色条。我该怎么做呢?
网格应为 x 方向 5 个单位、z 方向(y 轴)2.5 个单位

所以,我找到了解决方案。为了将来的参考,这段代码应该可以为那些有同样问题的人提供他们所需要的东西。我向plot.imshow()函数添加了一个“插值”参数,例如:
import matplotlib.pyplot as plt
import numpy as np
from scipy.interpolate import interp2d
# fmt: off
X_COORDINATE = [1.1, 1.5, 2.0, 3.0, 4.0, 5.0, 1.1, 1.5, 2.0, 3.0, 4.0, 5.0, 1.1, 1.5, 2.0, 3.0, 4.0, 5.0, 0.0, 0.5, 1.0, 1.1, 1.5, 2.0, 3.0, 4.0, 5.0, 0.0, 0.5, 1.0, 1.5, 2.0, 3.0, 4.0]
Z_COORDINATE = [0, 0, 0, 0, 0, 0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 1, 1, 1, 1, 1, 1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5]
C_I = [1.02414267447743, 0.210700871073941, 0.156586042435711, 0.109151033138569, 0.2279728779957, 0.204768257586954, 1.09037445301743, 0.287155868433615, 0.211257395413685, 0.132554129593619, 0.0900680495011601, 0.194608837248807, 1.34397119257655, 0.1201882143371, 0.17555070608144, 0.127220190160657, 0.204384526301353, 0.197414938747342, 0.195583977408476, 0.148150828086297, 0.183751866814816, 0.134858902076203, 0.183027629350907, 0.180267135381046, 0.0876356087026242, 0.183285092770786, 0.165502978081942, 0.0487725567447014, 0.172053559692846, 0.142204671797215, 0.166163224221791, 0.249334486033046, 0.150888488422605, 0.259452257883415]
# fmt: on
x_list = np.array(X_COORDINATE)
z_list = np.array(Z_COORDINATE)
C_I_list = np.array(C_I)
# f will be a function with two arguments (x and z coordinates),
# but those can be array_like structures too, in which case the
# result will be a matrix representing the values in the grid
# specified by those arguments
f = interp2d(x_list, z_list, C_I_list, kind="linear")
x_coords = np.arange(min(x_list), max(x_list) + 1)
z_coords = np.arange(min(z_list), max(z_list) + 1)
c_i = f(x_coords, z_coords)
fig = plt.imshow(
c_i,
extent=[min(x_list), max(x_list), min(z_list), max(z_list)],
origin="lower",
interpolation="bicubic",
)
# Show the positions of the sample points, just to have some reference
fig.axes.set_autoscale_on(False)
plt.scatter(x_list, z_list, 400, facecolors="none")
plt.colorbar()
plt.show()
Run Code Online (Sandbox Code Playgroud)
有谁知道如何更改地图上颜色的分辨率,以便我可以更好地看到整个地图上 0 和 1 值之间的变化?
地图现在如下所示:

| 归档时间: |
|
| 查看次数: |
9920 次 |
| 最近记录: |