Как установить свойство ограничения цвета для colorcolor для коллекции патчей (python, matplotlib) - PullRequest
1 голос
/ 31 марта 2020

Я строю объемные c распределения с осями x, y и z (размер частиц, форма частиц, объем (%) (ось z как цветовая шкала). При экспорте рисунка в виде svg между прямоугольники, нанесенные на график. Поэтому я попытался установить цвет кромки коллекции заплат. Это работает, однако, цвета краев имеют различный клим, и поэтому цвет краев отличается от самих заплат (см. пример на рисунке). Код для установки коллекции заплат:

p = PatchCollection(rects,cmap=matplotlib.cm.viridis)
colors = curem # colour of rectangles based on volume of the size-shape bins of curem
p.set_array(np.array(colors)) 
p.set_edgecolor(matplotlib.cm.viridis(np.array(colors))) 
p.set_clim([0, math.ceil(np.max(ems[ii]))]) # set maximum to max Rsqclass rounded up to next 1/5th
axs[zz].add_collection(p) # add all the rectangles to the figure

Так как же мне go настроить границу цвета для краев? Заранее спасибо, Ганс enter image description here

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Испытав несколько предложенных решений Дизиет Асахи, я обнаружил, что для этого конкретного случая c работает следующее:

p.set_edgecolor('face') # edgecolor equal to facecolor p.set_linewidth(0.5)

Теперь цвет края равен facecolor. Небольшая ширина линии (например, рекомендуемая 0,000000000001) не работает. Белые линии по-прежнему появляются при просмотре svg в Microsoft IntelliO rnet Explorer или Inkscape. Ширина линии 0,5 избавляет от белого пространства. Однако следует отметить, что требуемая ширина линии зависит от уровня масштабирования. Например, при увеличении 400% достаточно ширины линии 0,1. При увеличении 30% ширина линии все еще недостаточна.

Еще одно замечание: вышеприведенное решение указывает c на векторную графику svg. При хранении в формате .pdf решение, с которым связана Diziet, действительно работает (задайте для ширины линии бесконечно малое значение).

0 голосов
/ 31 марта 2020

Похоже, что существует общая проблема с отображением нежелательных линейных штрихов с векторными бэкэндами, как указано в этой проблеме на github matplotlib

Предлагаемое временное исправление заключается в использовании очень небольших, но не нулевая ширина линии:

либо передать linewidths=0.000000000001 в конструктор

p = PatchCollection(rects,cmap=matplotlib.cm.viridis, linewidths=0.000000000001)

, либо использовать

p.set_linewidth(0.000000000001)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...