使用matplotlib绘制2D像素图

29 投票
1 回答
93969 浏览
提问于 2025-04-16 19:25

我从一些计算中得到了以下数据:

x, y, temp

这里的x和y是一个10x10的二维框中的点的坐标。每个点之间的间隔是0.1。所以总共有10000个不同的点,生成的文件看起来像这样:

0.0 0.0 5.6
0.1 0.0 3.2
0.2 0.0 4.1
...
9.9 9.9 2.1

我想用matplotlib准备一个二维图,大小为100x100像素,每个像素根据第三列的值来上色(颜色从红色到紫色,形成彩虹色),颜色的变化是根据第三列的最小值和最大值来决定的,数据是从这个文件中读取的。我想知道用matplotlib实现这个的最佳方法是什么。

相关问题:

1 个回答

36

根据你提供的x、y、temp这三个数据的排列方式(按行列出),你可以直接调整“temp”这一列的形状。

比如说:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

x,y,temp = np.loadtxt('data.txt').T #Transposed for easier unpacking
nrows, ncols = 100, 100
grid = temp.reshape((nrows, ncols))

plt.imshow(grid, extent=(x.min(), x.max(), y.max(), y.min()),
           interpolation='nearest', cmap=cm.gist_rainbow)
plt.show()

hsv是你提到的“彩虹”颜色映射。 修改一下:你可能其实想要的是matplotlib.cm.gist_rainbowmatplotlib.cm.hsv在底部会回到红色。你可以在这里查看颜色映射的列表:https://matplotlib.org/users/colormaps.html

如果你的x、y、temp这三个数据并不是按顺序排列的,那你就需要重新调整这些点的位置。我在我之前的回答中给出了一个例子。

在这里输入图片描述

撰写回答