2

我用这个构造函数创建了一堆 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))

但是现在边缘的颜色和脸一样!所以我需要做的是 - 使用新的颜色图确定白色的值是什么......并更改

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) 等。谁能帮我弄清楚我应该怎么做放?有没有一种通用的方法可以知道任何给定颜色图的白色是什么?

4

1 回答 1

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()

在此处输入图像描述

于 2013-02-03T18:03:32.787 回答