Экспорт: вектор для статьи, растр для остального
Линейный график в статью — вектором; фотографию и плотный scatter — растром.
Векторные форматы (SVG, PDF, EPS) хранят фигуру как геометрию (линии, кривые, текст) и масштабируются без потери качества. Растровые (PNG, JPEG, TIFF) хранят сетку пикселей и при увеличении пикселизируются.
Вектор против растра
Векторный формат описывает фигуру формулами: «линия отсюда сюда», «текст таким шрифтом». Поэтому её можно увеличить хоть до плаката — края останутся идеально гладкими, а текст — резким. Для научных графиков (линии, точки, оси, подписи) это идеал: фигура в PDF/SVG выглядит безупречно при любом зуме и на печати. Растровый формат фиксирует пиксели: при увеличении они становятся видны как «лесенка».
| Формат | Тип | Когда использовать |
| вектор | фигуры в статьи (стандарт) | |
| 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 для научных графиков не использовать.
- Гибрид: векторные оси + растровый слой данных.