Как сделать дискретное цветное изображение из трех одномерных массивов, в которых одна ось объединена в несколько конечных лотков?

У меня есть три 1d numpy массива, соответствующих компонентам x, y и z. Мой массив x действительно является центральными значениями 7 ячеек, включая числовые значения от 10^8 до ~ 10^12, показанные ниже:

from numpy import *  
import matplotlib.pyplot as plt 
from matplotlib.ticker import MaxNLocator  

dm = 0.6  #bin width
N = 7     #number of bins
x = logspace(8.00+dm/2, 11.60+dm/2, N) 

Мои массивы y и z:

y = log10(np.array([30,20,5,1,0.5,0.3,0.1]))
z = array([0.38088762,0.20459653,0.18416128,0.0651294,0.0473667,0.04452491,0.07333356])

Теперь я пытаюсь построить дискретную 2-мерную гистограмму с цветовой шкалой, где интенсивность цвета должна представлять значение z, соответствующее (x, y) координатам. Это означает, что график должен состоять из горизонтального прямоугольника с определенным цветом в зависимости от значений z, так как мой массив x разбит на 7 одинаково разнесенных корзин. Это то, что я узнал до сих пор с точки зрения кода:

fig, (ax1) = plt.subplots()
levels = MaxNLocator(nbins=100).tick_values(z.min(), z.max())
cmap = plt.get_cmap('PiYG')
cf = ax1.tricontourf(x, y, z, levels=levels, cmap=cmap)
ax1.set_xlim([2.5e7, 3e12])
ax1.set_ylim([y.min(), y.max()])
ax1.set_xlabel('x', fontsize=12)
ax1.set_ylabel('y', fontsize=12)
ax1.set_xscale("log", nonposx='clip')
ax1.set_yscale("linear", nonposy='clip')

fig.colorbar(cf, ax=ax1, ticks=[0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1], spacing='uniform')
fig.tight_layout()
fig.show()

И вот вывод:

Однако это непрерывное цветное изображение с цветами, указанными в положении значений x, которые являются центральными значениями массива x. Но то, что я хочу, это иметь дискретное цветное изображение, указывающее цвет в каждой ячейке x вместо этого. Какие изменения я должен сделать, чтобы сделать это дискретное цветное изображение?

Спасибо,

0 ответов

Другие вопросы по тегам