как построить xy сетку, например, квадратов с цветами, считанными из массива - PullRequest
3 голосов
/ 19 апреля 2011

У меня есть отдельные массивы координат x и y и z-массив соответствующих значений.Я хотел бы сделать график, который имеет квадраты в каждой координате x и y, у которых есть цвета, установленные из массива z - что-то похожее на this .Я довольно много искал в Google, чтобы найти, как я могу это сделать, но безрезультатно.Для функции matplotlib.pyplot.scatter требуется цветовой массив, масштабируемый от 0 до 1, поэтому я не вижу, как это можно использовать в этих обстоятельствах.Любая помощь очень ценится.

Ответы [ 3 ]

2 голосов
/ 21 апреля 2011

Спасибо, Андрей.Я вижу, как это работает сейчас.Дело в том, что мой z-массив - это всего лишь один столбец чисел.Поскольку они расположены не в каком-либо разумном порядке, было бы трудно просто переформировать массив в 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)')
1 голос
/ 20 апреля 2011

Вам нужно сделать что-то вроде этого

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)

с этим точным кодом последняя точка будет вне оси, но она должна дать вам представление.

1 голос
/ 19 апреля 2011

Полагаю, вам нужно pcolor, как показано здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...