При экспорте довольно сложных графиков (особенно 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]]
, он будет намного меньше, но естественность и rescalability изображения естественно страдает.
Это сложнее, если моя фактическая цифра представляет собой комбинированный график, например (Edit: f
переходит на 900)
plot2 = Show[plot, Plot[x, {x, 500, 900}, PlotStyle -> Thick]]
(или с некоторым использованием Epilog
), где мне бы хотелось, чтобы фон ListDensityPlot
был растеризован, но сохраните другую разметку и графики в форме `` vector ''. Или, по крайней мере, метки рамки не растрируются.
Есть ли способ сделать это?
Или, чтобы достичь той же цели с помощью другого умного метода?
Update
Я проверил связанный с этим вопрос, но это должно быть намного сложнее, чем нужно (по сути, экспортировать, а затем импортировать). Я смог использовать некоторые из трюков в этом вопросе, чтобы извлечь сюжет отдельно от осей:
axes = Graphics[{}, Options[plot2]]
plots = Graphics[plot2[[1]]]
Но термин plots
теряет AspectRatio
и PlotRange
и т.д. plots
может быть поражен с помощью Rasterize
, но для этого требуется фиксирование размеров.
А потом, как их объединить?