растрирование содержимого оси matplotlib (но не рамки, метки)

Для статьи я создаю графики деформированных сеток конечных элементов, которые я визуализирую с использованием поликоллекции matplotlib. Изображения сохраняются в формате pdf.

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

Для этих сеток действительно нет смысла составлять каждый элемент как многоугольник; его можно легко растрировать, как это делается при сохранении изображения в формате jpg или png. Однако для печати я хотел бы остановиться на острой рамке, ярлыках и аннотациях.

Кто-нибудь знает, можно ли достичь такой гибридной растеризации в matplotlib?

Я могу думать о решениях с участием imshow и обходить поликоллекцию, но я бы предпочел использовать встроенные компоненты matplotlib.

Спасибо за ваш совет.

Просто передайте rasterized=True ключевое слово rasterized=True вашему конструктору коллекции. Пример:

 col = collections.PolyCollection(<arguments>, rasterized=True) 

Это позволяет использовать только выборочную растеризацию этого элемента (например, если вы сделали нормальный график поверх него, он по умолчанию будет векторизован). Большинство команд, таких как plot или imshow также могут использовать rasterized ключевое слово. Если вы хотите растрировать всю фигуру (включая метки и аннотации), это сделало бы это:

 fig = plt.figure() a = fig.add_subplot(1,1,1, rasterized=True) 

(Но это не то, что вы хотите, как указано в вопросе.)