Я пытаюсь нанести три / четыре мне sh вместе с результатами по этому мне sh. Я строю результаты симуляции CFD.
Я использую matplotlib.collections.PolyCollection
для построения графика, потому что он обрабатывает не три элементы, где другие методы поддерживают только три элемента.
мой текущий код работает нормально , но когда я пытаюсь отобразить результаты, когда в некоторых ячейках нет воды (прямо сейчас им присвоено значение np.nan
), построение графиков завершается сбоем, и все цвета контура портятся.
Мой текущий код:
ax = plt.subplot(111)
cmap = matplotlib.cm.jet
polys = element_coords #list of Nx2 np.arrays containing the coordinates of each element polygon)
facecolors = element_values #np array of values at each element, same length as polys
pc = matplotlib.collections.PolyCollection(polys, cmap=cmap)
pc.set_array(facecolors)
ax.add_collection(pc)
ax.plot()
Когда element_values не содержит никаких значений nan, он работает нормально и выглядит примерно так:
![works](https://i.stack.imgur.com/vcYsb.jpg)
Однако, когда element_values
содержит значения nan, происходит сбой, и я получаю эту ошибку:
C:\Users\deden\AppData\Local\Continuum\anaconda3\envs\test\lib\site-packages\matplotlib\colors.py:527: RuntimeWarning: invalid value encountered in less
xa[xa < 0] = -1
Я играл с element_values
и могу подтвердить, что это происходит только при наличии значений nan
.
Сначала я попытался игнорировать значения nan
, выполнив это только для того, чтобы прояснить их:
pc.cmap.set_bad(color='white',alpha=0)
Но я все еще получаю ту же ошибку.
Итак ... Я пытался устанавливая все значения nan
на -999
, затем пытаясь отрезать цвет p вот так:
vmin = np.nanmin(facecolors)
vmax = np.nanmax(facecolors)
facecolors[np.isnan(facecolors)] = -999
pc.cmap.set_under(color='white',alpha=0)
затем попытался установить пределы цветовой карты на основе других вопросов стека, которые я видел .. вроде:
pc.cmap.set_clim(vmin,vmax)
, но затем я получаю:
AttributeError: 'ListedColormap' object has no attribute 'set_clim'
У меня нет идей ... кто-нибудь может мне помочь? Я просто хочу НЕ ЦВЕТИТЬ ни один элемент, значение которого равно nan.
Чтобы воспроизвести мою ошибку ... вы можете попробовать использовать эти фиктивные данные:
polys = [np.array([[ 223769.2075899 , 1445713.24572239],
[ 223769.48419606, 1445717.09102757],
[ 223764.48282055, 1445714.84782264]]),
np.array([[ 223757.9584215 , 1445716.57576502],
[ 223764.48282055, 1445714.84782264],
[ 223762.05868674, 1445720.48031478]])]
facecolors = np.array([np.nan, 1]) #will work if you replace np.nan with a number
SIDE NOTE - если кто-нибудь знает как Я могу построить эту сетку + данные без поликоллекций, которые были бы хороши ... это включает в себя 3-х и 4-х сторонние меня sh элементы