Matplotlib - контурный сюжет с одним значением - PullRequest
5 голосов
/ 07 апреля 2011

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

Как сделать контурный график для некоторых данных, если это однородное поле? Я хочу, чтобы он выглядел так же, как обычный контурный график (чтобы была рамка, заполненная каким-то цветом, и чтобы отображалась цветная полоса сбоку. Цветная полоса могла бы быть однородного цвета или все же отображать диапазон из 15 цветов, я не все равно).

Код:

from numpy        import array
import matplotlib.pyplot as plt

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

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

1 Ответ

10 голосов
/ 07 апреля 2011

Ну, contourf отлично с этим справляется, это contour, что душит.

Почему бы просто не сделать это:

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.ones((3,3))

try:
    CS = plt.contour(xi, yi, zi, 15, linewidths=0.5, colors='k')
except ValueError:
    pass
CS = plt.contourf(xi, yi, zi, 15, cmap=plt.cm.jet)

plt.colorbar()
plt.show()

Таким образом, вы получите заполненный (зеленый, по умолчанию) поле, если есть однородное поле, и заполненный контурный график с линиями в противном случае.

enter image description here

...