Matplotlib имеет метод imshow
для построения массивов:
import matplotlib as mpl
from matplotlib import pyplot
import numpy as np
# make values from -5 to 5, for this example
zvals = np.random.rand(100,100)*10-5
# make a color map of fixed colors
cmap = mpl.colors.ListedColormap(['blue','black','red'])
bounds=[-6,-2,2,6]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
# tell imshow about color map so that only set colors are used
img = pyplot.imshow(zvals,interpolation='nearest',
cmap = cmap,norm=norm)
# make a color bar
pyplot.colorbar(img,cmap=cmap,
norm=norm,boundaries=bounds,ticks=[-5,0,5])
pyplot.show()
Вот как это выглядит:
Подробности настройки цветовой шкалы были взяты из примера matplotlib: colorbar_only.py. Это объясняет, что число boundaries
должно быть на единицу больше, чем количество цветов.
РЕДАКТИРОВАТЬ
Вы должны отметить , что imshow
принимает ключевое слово origin
, которое задает, где назначена первая точка. По умолчанию используется «верхний левый угол», поэтому на моем опубликованном графике ось y имеет 0 в левом верхнем углу и 99 (не показано) в левом нижнем углу. Альтернативой является установка origin="lower"
, чтобы первая точка отображалась в левом нижнем углу.
РЕДАКТИРОВАТЬ 2
Если вам нужен градиент, а не дискретная карта цветов, создайте карту цветов с помощью , линейно интерполируя через серию цветов:
fig = pyplot.figure(2)
cmap2 = mpl.colors.LinearSegmentedColormap.from_list('my_colormap',
['blue','black','red'],
256)
img2 = pyplot.imshow(zvals,interpolation='nearest',
cmap = cmap2,
origin='lower')
pyplot.colorbar(img2,cmap=cmap2)
fig.savefig("image2.png")
Это производит:
РЕДАКТИРОВАТЬ 3
Чтобы добавить сетку, как показано в этом примере , используйте метод grid
. Установка цвета сетки на «белый» хорошо работает с цветами, используемыми цветовой картой (т. Е. Черный по умолчанию плохо отображается).
pyplot.grid(True,color='white')
Включая это до того, как вызов savefig
создаст этот график (для ясности сделанный с использованием сетки 11x11):
Существует множество опций для grid
, которые описаны в документации matplotlib . Возможно, вас заинтересует linewidth
.