在matplotlib patchcollection中设置颜色范围

时间:2011-05-17 09:14:16

标签: python matplotlib patch

我正在matplotlib中绘制一个PatchCollection,其中包含从文件读入的coords和补丁颜色值。

问题是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 个答案:

答案 0 :(得分:21)

在示例中,使用p.set_clim([5, 50])设置颜色缩放最小值和最大值。 matplotlib中包含色彩映射的任何内容都包含get_climset_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