Python - 基于值绘制网格

标签 python matplotlib plot

我检查了类似的线程,我的问题将更进一步:Plotting colored grid based on values

我有一个 20 x 10 的网格,其中第一个单元格(左下角)的 ID = 0,最后一个单元格(右上角)的 ID = 99。 假设我有两个列表。第一个是值大于 0 的单元格列表,第二个列表由这些值组成,例如ID = 11 的单元格的值为 77。

Cellid = [2, 4 ,5, 11 ,45 ,48 ,98]
Cellval = [20, 45 ,55, 77,45 ,30 ,15]
  1. 我想绘制此网格的二维图,其中单元格颜色为 基于值(value)。空单元格为空白,其余部分:值越大,单元格越绿。
  2. 其次,我想将 2D 图从之前的点升级为 3D 图,其中单元格值是列。

你能给我一个如何处理这个问题的建议吗?

最佳答案

“grid size 20 x 10”和右上ID=99有矛盾。所以我假设您在这里指的是“网格尺寸 10 x 10”。

然后您可以创建一个数组,除了 Cellid 给出的位置外,所有位置都为 0。在这里,我假设 ID 首先沿着 x 运行。您可以屏蔽它,使 0 完全不被着色;他们将其绘制为 imshow

import numpy as np
import matplotlib.pyplot as plt

nrows = 10
ncols = 10

Cellid = [2, 4 ,5, 11 ,45 ,48 ,98]
Cellval = [20, 45 ,55, 77,45 ,30 ,15]

data = np.zeros(nrows*ncols)
data[Cellid] = Cellval
data = np.ma.array(data.reshape((nrows, ncols)), mask=data==0)

fig, ax = plt.subplots()
ax.imshow(data, cmap="Greens", origin="lower", vmin=0)

# optionally add grid
ax.set_xticks(np.arange(ncols+1)-0.5, minor=True)
ax.set_yticks(np.arange(nrows+1)-0.5, minor=True)
ax.grid(which="minor")
ax.tick_params(which="minor", size=0)

plt.show()

enter image description here

关于Python - 基于值绘制网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55517072/

相关文章:

plot - 可以在 Vega-Lite 上编写 Latex 吗?

python - 仅在某些位置替换表示日期的字符串

python - 如何提高分类的F1分数

python - wxPython - 当焦点改变时,使用设备上下文绘制的线条消失

python - key 错误 : '[datetime.time(12, 19, 29) not in index'

python - Matplotlib - 在对数刻度上旋转文本,其中角度不正确地舍入

Python Matplotlib - 显示与标绘点相关的刻度线

matlab - 如何在 Matlab 中使用不同颜色绘制由 15 个数据集和 5 个不同变量组成的 9x75 矩阵?

matlab - 如何在 MATLAB 中使用不规则间隔的数据制作冲浪图?

Python 切片运算符 : Negative start combined with Positive stop