У меня есть заполненный контурный график, который я хочу сохранить в виде файла .svg или .pdf. Ниже приведен упрощенный пример. Я хочу растеризовать сам контурный график (цветную часть!), Сохранив при этом все остальное (все оси, метки и т. д.) в виде векторной графики.
import numpy as np
import matplotlib.pylab as plt
x = np.linspace(0, 2*np.pi, 100)
y = np.linspace(0, 2*np.pi, 100)
xi, yi = np.meshgrid(x, y)
zi = np.cos(xi)**2 + np.sin(yi)**2
plt.figure()
plt.contourf(xi, yi, zi, rasterized=True)
plt.savefig('fig.svg', dpi=100)
Однако, когда я просматриваю fig.svg или открываю его для редактирования в Inkscape (я могу разгруппировать заполненный контур в векторные фигуры), становится ясно, что растеризация не сработала!
Это нормально для такого простого графика, но если мой график имеет большее количество уровней контура (ниже), векторному изображению потребуется много кривых, а размер файла будет намного больше.
plt.close()
plt.figure()
plt.contourf(xi, yi, zi, 100, rasterized=True)
plt.savefig('fig.svg', dpi=100)
Может кто-нибудь предложить решение и объяснить, почему этот флаг rasterized=True
не сделал то, что мне нужно?
contourf()
возвращает объектQuadContourSet
. Этот объект, в отличие от объектов, происходящих от классаArtist
, не имеет свойства растрировать. - person Diziet Asahi   schedule 07.12.2017