我用这个构造函数创建了一堆RegularPolygons -
node.brushShape = RegularPolygon((node.posX, node.posY),
6,
node.radius * 0.8,
linewidth = 3,
edgecolor = (1,1,1),
facecolor = 'none',
zorder = brushz)
如您所见,我希望这些补丁的边缘是白色的。我将它们全部放入名为brushShapes的列表中,然后创建一个PatchCollection -
self.brushShapesPC = PatchCollection(self.brushShapes, match_original=True)
这种方式可以很好地保持边缘白色。但是,现在我想使用用户定义的色彩映射 -
colormap = {'red': ((0.0, 0.0, 0.0),
(0.25,0.0, 0.0),
(0.5, 0.8, 1.0),
(0.75,1.0, 1.0),
(1.0, 0.4, 1.0)),
'green': ((0.0, 0.0, 0.0),
(0.25,0.0, 0.0),
(0.5, 0.9, 0.9),
(0.75,0.0, 0.0),
(1.0, 0.0, 0.0)),
'blue': ((0.0, 0.0, 0.4),
(0.25,1.0, 1.0),
(0.5, 1.0, 0.8),
(0.75,0.0, 0.0),
(1.0, 0.0, 0.0))}
所以现在我的PatchCollection实例化是 -
self.brushShapesPC = PatchCollection(self.brushShapes, cmap=mpl.colors.LinearSegmentedColormap('SOMcolormap', self.colormap))
但现在边缘的颜色与脸部相同!所以我需要做的是 - 使用新的colormap确定白色的值是什么......并更改
edgecolor = (1,1,1)
到
edgecolor = (whatever_white_is)
在这个构造函数中 -
node.brushShape = RegularPolygon((node.posX, node.posY),
6,
node.radius * 0.8,
linewidth = 3,
edgecolor = (1,1,1),
facecolor = 'none',
zorder = brushz)
是吗?我试图确定白色的价值是多么困难。当我调出一个颜色条时,它显示白色正好位于中心...所以我尝试过(0.5,0.5,0.5),(0,1,0)等等。任何人都可以帮我弄清楚我应该做什么放?是否有通用的方法来了解任何给定色图的白色是什么?
答案 0 :(得分:1)
我认为你有点倒退了。没有完全通用的方法来确定色图中的白色(它可能存在多次或根本不存在)。
但是,您可以在使用PolyCollection时指定多边形的边缘应为白色,同时仍然使用面的色彩映射。只需指定edgecolors
而不是edgecolor
。这是一个令人困惑的问题,但这个想法是它是复数,因为你可以指定多个值。另外,请查看RegularPolygonCollection
作为一个简单的例子:
import matplotlib.pyplot as plt
from matplotlib.patches import RegularPolygon
from matplotlib.collections import PatchCollection
import numpy as np
xy = np.random.random((10,2))
z = np.random.random(10)
patches = [RegularPolygon((x,y), 5, 0.1) for x, y in xy]
collection = PatchCollection(patches, array=z, edgecolors='white', lw=2)
fig, ax = plt.subplots()
# So that the white edges show up...
ax.patch.set(facecolor='black')
ax.add_collection(collection)
ax.autoscale()
plt.show()