使用matplotlib绘制2D像素图
我从一些计算中得到了以下数据:
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_rainbow。matplotlib.cm.hsv在底部会回到红色。你可以在这里查看颜色映射的列表:https://matplotlib.org/users/colormaps.html。
如果你的x、y、temp这三个数据并不是按顺序排列的,那你就需要重新调整这些点的位置。我在我之前的回答中给出了一个例子。
