Python / Matplotlib — Диапазон цветовой шкалы и отображаемые значения

#python #matplotlib #contour #colorbar

#python #matplotlib #контур #цветовая шкала

Вопрос:

При использовании matplotlib с контурным графиком у меня возникают проблемы с отображением цветовой шкалы так, как я хочу. Я прочитал множество похожих примеров, но все еще не смог получить то, что я хочу.

На изображении ниже я хочу изменить две вещи. Я хочу, чтобы минимальное значение и максимальные значения отображались на цветовой панели (максимальное значение должно быть 2.0, а минимальное -0.1). Эти два значения должны находиться на самом краю цветовой панели. Кроме того, я хочу, чтобы цветовая панель отображала значение при каждом переходе цвета. Например. на графике ниже, между 2.1 и 1.8, есть другой цветовой переход, при котором значение не отображается.

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

введите описание изображения здесь

Код:

 import numpy as np
import matplotlib.pyplot as plt

xi = np.array([0., 0.5, 1.0])
yi = np.array([0., 0.5, 1.0])
zi = np.array([[0., 1.0, 2.0],
               [0., 1.0, 2.0],
               [-0.1, 1.0, 2.0]])

plt.contour(xi, yi, zi, 15, linewidths=0.5, colors='k')
plt.contourf(xi, yi, zi, 15, cmap=plt.cm.jet)
plt.colorbar()
plt.show()
  

Ответ №1:

Если я правильно понимаю, чего вы хотите, я думаю, это должно сработать:

 import numpy as np
import matplotlib.pyplot as plt

xi = np.array([0., 0.5, 1.0])
yi = np.array([0., 0.5, 1.0])
zi = np.array([[0., 1.0, 2.0],
               [0., 1.0, 2.0],
               [-0.1, 1.0, 2.0]])

v = np.linspace(-.1, 2.0, 15, endpoint=True)
plt.contour(xi, yi, zi, v, linewidths=0.5, colors='k')
plt.contourf(xi, yi, zi, v, cmap=plt.cm.jet)
x = plt.colorbar(ticks=v)
print x
plt.show()
  

введите описание изображения здесь

Ответ №2:

Альтернатива:

 
    import numpy as np
    import matplotlib.pyplot as plt
    
    xi = np.array([0., 0.5, 1.0])
    yi = np.array([0., 0.5, 1.0])
    zi = np.array([[0., 1.0, 2.0],
                   [0., 1.0, 2.0],
                   [-0.1, 1.0, 2.0]])
    
    v = np.linspace(-.1, 2.0, 15, endpoint=True)
    
    fig, ax = plt.subplots()
    
    plt.contour(xi, yi, zi, v, linewidths=0.5, colors='k')
    ContourPlot = plt.contourf(xi, yi, zi, v, cmap=plt.cm.jet)
    
    ColorBar = fig.colorbar(ContourPlot) # Add a colorbar to a plot
    ColorBar.set_ticks(v)
    plt.show()
  

введите описание изображения здесь