Экспорт: вектор для статьи, растр для остального

Линейный график в статью — вектором; фотографию и плотный scatter — растром.

Векторные форматы (SVG, PDF, EPS) хранят фигуру как геометрию (линии, кривые, текст) и масштабируются без потери качества. Растровые (PNG, JPEG, TIFF) хранят сетку пикселей и при увеличении пикселизируются.

Вектор против растра

Векторный формат описывает фигуру формулами: «линия отсюда сюда», «текст таким шрифтом». Поэтому её можно увеличить хоть до плаката — края останутся идеально гладкими, а текст — резким. Для научных графиков (линии, точки, оси, подписи) это идеал: фигура в PDF/SVG выглядит безупречно при любом зуме и на печати. Растровый формат фиксирует пиксели: при увеличении они становятся видны как «лесенка».

ФорматТипКогда использовать
PDFвекторфигуры в статьи (стандарт)
SVGвекторвеб, редактируемые фигуры
EPSвекторстарые требования журналов
PNGрастр (без потерь)презентации, плотные scatter, веб
TIFFрастр (без потерь)микроскопия, требования журналов
JPEGрастр (с потерями)фото; НЕ для графиков

Когда всё-таки растр

Вектор не всегда лучше. Если на scatter миллион точек, векторный PDF будет хранить миллион объектов — файл раздуется до сотен мегабайт и подвесит просмотрщик. Здесь разумнее растр (PNG высокого DPI) или гибрид: растровая «начинка» данных плюс векторные оси и подписи (в matplotlib — растеризация только слоя данных). То же для тепловых карт и изображений с микроскопа — они изначально растровые.

Почему не JPEG

JPEG — формат сжатия с потерями, заточенный под фотографии. На графиках с резкими краями (линии, текст) он оставляет «звон» — артефакты вокруг контуров. Текст подписей становится мутным. Для научных фигур JPEG запрещён по сути: используйте PNG (растр без потерь) или, лучше, вектор.

Прикинем размер векторного файла

Грубо оценим, почему вектор плох для миллиона точек: размер растёт с числом объектов.

bytes_per_point = 30   # грубо: координаты + стиль в векторе
for n in [100, 1000, 100_000, 1_000_000]:
    kb = n * bytes_per_point / 1024
    fmt = "вектор ок" if n <= 10_000 else "лучше растр PNG"
    print(f"{n:>9} точек -> ~{kb:8.0f} КБ вектором ({fmt})")

Вывод:

      100 точек -> ~       3 КБ вектором (вектор ок)
     1000 точек -> ~      29 КБ вектором (вектор ок)
   100000 точек -> ~    2930 КБ вектором (лучше растр PNG)
  1000000 точек -> ~   29297 КБ вектором (лучше растр PNG)

Миллион точек в векторе — около 29 МБ; тот же scatter в PNG занял бы доли мегабайта. Отсюда правило: мало объектов — вектор, много — растр.

Как работает под капотом

Векторный рендер хранит команды рисования (path), которые растеризуются устройством вывода в его собственном разрешении — потому и нет привязки к пикселям. Растровый файл — это уже растеризованная сетка; повышать его разрешение нечем, увеличение лишь растягивает имеющиеся пиксели. PDF умеет смешивать оба: текст и оси как вектор, тяжёлый слой данных как встроенный растр — лучшее из двух миров.

Подготовка под требования журнала

У каждого журнала свои требования к фигурам, и их стоит прочитать до финального экспорта. Типичные пункты: минимальный DPI для растровых изображений (обычно 300 для цветных и полутоновых, 600-1200 для штриховых), допустимые форматы (часто TIFF или EPS/PDF), цветовая модель (RGB для онлайн, иногда CMYK для печати), встраивание шрифтов в PDF (иначе текст «поедет» на чужой машине), максимальная ширина в колонках. Несоблюдение этих требований — частая причина возврата статьи на доработку уже на этапе продакшена.

Практичный рабочий процесс: держите фигуры в скрипте, экспортируйте в вектор (PDF) как основной формат, а при необходимости конвертируйте в требуемый журналом формат на финальном шаге. Встраивайте шрифты, проверяйте размер при 100% и при уменьшении до ширины колонки — читаемы ли подписи. Для фигур с миллионами точек заранее планируйте гибрид: растеризованный слой данных внутри векторного PDF сохраняет резкость осей и текста при разумном размере файла. Эта аккуратность на финише экономит недели переписки с редакцией.

Частые ошибки

  • JPEG для графика — артефакты сжатия на линиях и тексте.
  • Растр там, где нужен вектор — линейный график в PNG низкого DPI пикселизируется при печати.
  • Вектор для миллиона точек — гигантский файл, тормоза; растеризуйте слой данных.
  • Скриншот фигуры вместо экспорта — низкое разрешение, потеря качества.

Итог

  • Линии, точки, оси — в вектор (PDF/SVG): идеальны при любом масштабе.
  • Очень плотные данные и изображения — в растр (PNG/TIFF) высокого DPI.
  • JPEG для научных графиков не использовать.
  • Гибрид: векторные оси + растровый слой данных.
Проверьте себя
1. Почему линейный график лучше сохранять в векторный PDF/SVG?
AФайл всегда меньше
BВектор масштабируется без потери качества: линии и текст остаются резкими при любом зуме и печати
CPDF быстрее открывается
DВектор поддерживает больше цветов
2. Когда для научной фигуры разумнее растр (PNG)?
AНикогда
BКогда объектов очень много (например, миллион точек) и векторный файл раздувается
CДля любого графика с осями
DТолько для чёрно-белых фигур
3. Почему JPEG не подходит для графиков?
AОн не поддерживает цвет
BСжатие с потерями даёт артефакты вокруг резких краёв линий и текста
CОн слишком большой
DЕго нельзя открыть