Как уменьшить размер файла экспортируемых графиков, сохраняя четкость меток

При экспорте довольно сложных графиков (особенно 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]

Mathematica graphics

Этот пример набора данных по размеру соответствует тому, с которым я обычно работаю. Когда я экспортирую его с помощью 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]]

Mathematica graphics

(или при использовании Epilog), где я хотел бы растеризовать фоновый ListDensityPlot, но сохранить другие разметки и графики в ``векторной'' форме. Или, по крайней мере, чтобы метки рамок были нерастеризованными.

Есть ли способ сделать это?

Или достичь той же цели каким-то другим умным способом?


Обновление

Я проверил связанный вопрос, но это должно быть намного сложнее, чем нужно (по сути, экспорт и импорт). Я смог использовать некоторые трюки из этого вопроса для извлечения графика отдельно от осей:

axes = Graphics[{}, Options[plot2]]

Mathematica graphics

plots = Graphics[plot2[[1]]]

Mathematica graphics

Но, термин plots теряет AspectRatio и PlotRange, и т.д. plots можно сбить с помощью Rasterize, но он нуждается в исправлении размеров.

И потом, как их объединить вместе?

12
задан Eli Lansey 3 January 2012 в 21:05
поделиться