Отфильтруйте определенные цвета после нанесения данных, используя цветовую карту - PullRequest
0 голосов
/ 14 июня 2019

Используя приведенный ниже код, я сделал данные для построения графика, используя только верхнюю половину (от 0,5 до 1) стандартной цветовой карты «jet», диапазон цветовой карты составляет от 0 до 1. Если я хочу, чтобы данные отображали цвета только в диапазоне от 0,7 до 1, как мне это сделать?

  import numpy as np
  import matplotlib.pyplot as plt
  from matplotlib.colors import LinearSegmentedColormap
  np.random.seed(1)
  # Evaluate an existing colormap from 0.5 (midpoint) to 1 (upper end)
  cmap = plt.get_cmap('jet')
  colors = cmap(np.linspace(0.5, 1, cmap.N ))

  # Create a new colormap from those colors
  cmap2 = LinearSegmentedColormap.from_list('Upper Half', colors)

  z = np.random.random((4,4)) 

  fig, axes = plt.subplots(ncols=2)
  for ax, cmap in zip(axes.flat, [cmap, cmap2]):
      cax = ax.imshow(z, cmap=cmap, origin='lower')
      cbar = fig.colorbar(cax, ax=ax, orientation='horizontal')
      cbar.set_label(cmap.name)

  plt.show()

Результат:

result

Я хочу получить что-то похожее

expected result

1 Ответ

0 голосов
/ 14 июня 2019

Вы можете использовать vmin и vmax аргумент.Определите диапазоны в списке с именем vlst, которые составляют 0-1 для левой фигуры и 0,7-1 для правой фигуры.

vlst = [[0, 1], [0.7, 1]]

fig, axes = plt.subplots(ncols=2)
for ax, cmap, v in zip(axes.flat, [cmap, cmap2], vlst):
    cax = ax.imshow(z, cmap=cmap, origin='lower',vmin=v[0], vmax=v[1])
    cbar = fig.colorbar(cax, ax=ax, orientation='horizontal')
    cbar.set_label(cmap.name)

plt.show()

enter image description here

...