установка диапазона цветов в коллекции патчей matplotlib - PullRequest
8 голосов
/ 17 мая 2011

Я строю PatchCollection в matplotlib с координатами и значениями цвета патча, считанными из файла.

Проблема в том, что matplotlib автоматически масштабирует цветовой диапазон до минимума / максимума значений данных. Как я могу вручную установить цветовую гамму? Например. если мой диапазон данных 10-30, но я хочу масштабировать его до диапазона 5-50 (например, для сравнения с другим графиком), как я могу это сделать?

Мои команды печати выглядят почти так же, как в примере кода API: patch_collection.py

colors = 100 * pylab.rand(len(patches))
p = PatchCollection(patches, cmap=matplotlib.cm.jet, alpha=0.4)
p.set_array(pylab.array(colors))
ax.add_collection(p)
pylab.colorbar(p)

pylab.show()

1 Ответ

21 голосов
/ 17 мая 2011

Используйте p.set_clim([5, 50]), чтобы установить минимумы и максимумы цветовой шкалы в случае вашего примера. Все в matplotlib, у которого есть цветовая карта, имеет методы get_clim и set_clim.

В качестве полного примера:

import matplotlib
import matplotlib.pyplot as plt
from matplotlib.collections import PatchCollection
from matplotlib.patches import Circle
import numpy as np

# (modified from one of the matplotlib gallery examples)
resolution = 50 # the number of vertices
N = 100
x       = np.random.random(N)
y       = np.random.random(N)
radii   = 0.1*np.random.random(N)
patches = []
for x1,y1,r in zip(x, y, radii):
    circle = Circle((x1,y1), r)
    patches.append(circle)

fig = plt.figure()
ax = fig.add_subplot(111)

colors = 100*np.random.random(N)
p = PatchCollection(patches, cmap=matplotlib.cm.jet, alpha=0.4)
p.set_array(colors)
ax.add_collection(p)
plt.colorbar(p)

plt.show()

enter image description here

Теперь, если мы просто добавим p.set_clim([5, 50]) (где p - коллекция патчей) где-то перед тем, как вызвать plt.show(...), мы получим следующее: enter image description here

...