Как найти белый цвет с помощью пользовательской карты цветов Matploblib?

Я создаю кучу 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) и т. Д. Может кто-нибудь помочь мне понять, что я должен положил? Есть ли общий способ узнать, что белый для любой данной цветовой карты?

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

Другие вопросы по тегам