При экспорте довольно сложных графиков (особенно 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]]
, он будет гораздо меньше, но целостность и масштабируемость изображения, естественно, пострадает.
Это усложняется еще больше, если мой реальный рисунок представляет собой комбинированный график, например (Edit: f
goes to 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
, но он нуждается в исправлении размеров.
И потом, как их объединить вместе?