如何绘制例如x-y网格从数组中读取颜色的正方形

我有单独的x和y坐标数组,以及相应值的z数组。我想制作一个在每个x和y坐标上都有方格的图表,它们的颜色是从z数组中设置的,类似于this。我在谷歌搜索很难找到我如何能做到这一点,但无济于事。 matplotlib.pyplot.scatter函数需要从0-1缩放的颜色数组,所以我看不到在这种情况下如何使用它。任何帮助深表感谢。

已邀请:

wnatus

赞同来自:

谢谢Andrew。我现在看到它是如何工作的。问题是我的z-array只是一列数字。由于它们没有任何合理的顺序,因此很难将数组重新塑造为2D以使用pcolor。 我已经提出了一个更好的解决方案,使用for循环将矩形补丁附加到补丁集合,然后将颜色映射分配给整个集合和绘图。

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.collections import PatchCollection
import matplotlib.patches as mpatches
fig = plt.figure(figsize=(9,5))
ax = plt.axes([0.1,0.1,0.7,0.7])
cmap = matplotlib.cm.jet
patches = []
data=np.array([4.5,8.6,2.4,9.6,11.3])
data_id_nos=np.array([5,6,9,8,7])
x_coords=np.array([3.12,2.6,2.08,1.56,1.04])
y_coords=np.array([6.76,6.24,5.72,5.20,4.68])
coord_id_nos=np.array([7,9,6,5,8])
for i in range(len(data_id_nos)):
        coords=(x_coords[np.where(coord_id_nos == data_id_nos[i])],y_coords[np.where(coord_id_nos == data_id_nos[i])])
        art = mpatches.Rectangle(coords,0.50,0.50,ec="none")
        patches.append(art)
#create collection of patches for IFU position
IFU1 = PatchCollection(patches, cmap=cmap)
#set the colours = data values
IFU1.set_array(np.array(data))
ax.add_collection(IFU1)
plt.axis('scaled')
plt.xlabel('x (arcsecs)')
plt.ylabel('y (arcsecs)')

hquia

赞同来自:

我想你想要pcolor,如here所示。

gest

赞同来自:

你需要做这样的事情

x = np.arange(10)
y = np.arange(10)
z = np.zeros([10,10])
z[1,5] = 10
z[2,7] = 20
z[3,9] = 30
pcolor(x,y,z)
使用这个精确的代码,最后一点将离开轴,但它应该给你的想法。

要回复问题请先登录注册