При экспорте довольно сложных графиков (особенно ListDensityPlot
) в формате PDF или EPS (например, для публикации) размер получаемого файла может быть довольно большим. Например:
data = Flatten[Table[{f0, f, Exp[-(f - f0)^2/25^2]}, {f0, 500, 700, 5}, {f, 300,
900}], 1];
plot=ListDensityPlot[data,PlotRange->{Automatic,Automatic,{0,1}},InterpolationOrder->0]

Этот пример набора данных порядка того размера, с которым я обычно работаю. Когда я экспортирую, используя Export["C:\\test.pdf", plot]
, он генерирует PDF-файл размером 23,9 МБ. Если я вместо этого попробую Export["C:\\test1.pdf", Rasterize[plot]]
, это будет намного меньше, но целостность и изменяемость изображения естественным образом страдают.
Это еще более усложняется, если моя фактическая фигура представляет собой комбинированный сюжет, такой как ( Редактировать : f
переходит к 900)
plot2 = Show[plot, Plot[x, {x, 500, 900}, PlotStyle -> Thick]]

(или с некоторым использованием Epilog
), где я бы хотел, чтобы фон ListDensityPlot
был растеризован, но оставил другую разметку и графики в виде `` вектора ''. Или, по крайней мере, метки кадров не растеризованы.
Есть ли способ сделать это?
Или для достижения той же цели другим умным методом?
Обновление
Я проверил связанный с этим вопрос, но это должно быть намного сложнее, чем нужно (по сути, экспорт, а затем импорт). Я смог использовать некоторые приемы в этом вопросе, чтобы извлечь график отдельно от осей:
axes = Graphics[{}, Options[plot2]]

plots = Graphics[plot2[[1]]]

Но, член plots
теряет AspectRatio
и PlotRange
и т. Д. plots
можно ударить с помощью Rasterize
, но это требует размерной фиксации.
А потом, как их объединить?