Нарисуйте график глифов в Matplotlib

Я использовал Matplotlib для построения некоторых научных визуализаций, для которых графики тепловой карты (как показано ниже) были достаточными. Мой код также написан на Python .

введите описание изображения здесь

Однако теперь мне нужно представить более «продуманный» сюжет, состоящий из глифов. Следующий образ (второй) показывает пример:

введите описание изображения здесь

На этом изображении каждая точка графика представляет собой глиф, который представляет вероятность ориентации векторного поля. Это глиф – это рисование в виде круга с основным направлением и стандартным отклонением от его направления.

Я хотел бы сделать что-то подобное. Моя идея заключалась в том, чтобы рисовать что-то наподобие полярной гистограммы в каждой позиции и иметь сюжет, состоящий из полярных диаграмм. Однако я не думаю, что это возможно с Matplotlib; по крайней мере, я не знаю, как это можно сделать. Поскольку весь мой код написан на Python, мне было интересно, смогу ли я каким-то образом встать с Matplotlib, или если я буду изучать, как это сделать с OpenGL или другим API / libraty.

Спасибо.

Возможно, что-то вроде этого:

введите описание изображения здесь

import matplotlib.pyplot as plt import numpy as np from matplotlib.collections import PatchCollection from matplotlib.patches import Wedge, Circle from math import degrees, pi fig, ax = plt.subplots() wedges = [] circles = [] for x in np.arange(0, 3.3, .3): for y in np.arange(0, 3.3, .3): theta, phi = np.random.random(2) # functions of (x,y) in reality for v in (0, pi): wedges.append(Wedge((x, y), .15, degrees(v - phi - theta/2), degrees(v - phi + theta/2), edgecolor='none'), ) circles.append(Circle((x, y), .15, edgecolor='none')) colors = np.linspace(0, 1, len(circles)) # function of (x,y) in reality collection = PatchCollection(circles, cmap=plt.cm.jet, alpha=0.2) collection.set_array(np.array(colors)) collection.set_edgecolor('none') ax.add_collection(collection) #wedgecolors = list(chain.from_iterable(repeat(i,2) for i in colors)) wedgecolors = np.array([colors, colors]).flatten('F') # no itertools collection = PatchCollection(wedges, cmap=plt.cm.jet, alpha=1) collection.set_array(np.array(wedgecolors)) collection.set_edgecolor('none') ax.add_collection(collection) ax.set_xlim(0,3) ax.set_ylim(0,3) ax.set_aspect('equal') plt.show() 

(Настройка edgecolor должна быть выполнена (переделана?) После вызова collection.set_array , по-видимому.)