Как найти белый цвет с помощью пользовательской карты цветов 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()