LINUX.ORG.RU

pdflatex не хочет строить график из 15К точек

 ,


0

2

Сразу приведу минимальный пример, воспроизводящий ошибку

\documentclass[12pt,a4paper]{article}
\usepackage[left=10mm, top=15mm, right=10mm, bottom=15mm]{geometry}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\usepackage{tikz}
\usepgfplotslibrary{external} 
\tikzexternalize[prefix=tikzfiles/]

\begin{document}
  \begin{tikzpicture}
    \begin{axis}
      \addplot table [x=v, y=p, col sep=comma] {trt.csv};
    \end{axis}
  \end{tikzpicture}
\end{document}

csv-файл содержит пары координат по типу

1,1
1.2122,1.2121
0.9212,0.8323

Всего их там около 15К пар. Я попробовал разделить файл на несколько по 2К пар, и строить их разными \addplotами, но не помогло, те же ошибки Если нужно - файл, который я использую https://wdfiles.ru/d54a24

При выполнении pdflatex -synctex=1 -interaction=nonstopmode -shell-escape %filename%.tex выдаёт

Package tikz Error: Sorry, the system call 'pdflatex -shell-escape -halt-on-error interaction=batchmode -jobname "tikzfiles/nistco2-figure0" "\def\tikzexternalrealjob{nistco2}\input{nistco2}"' did NOT result in a usable output file 'tikzfiles/nistco2-figure0' (expected one of .pdf:.jpg:.jpeg:.png:). Please verify that you have enabled system calls. For pdflatex, this is 'pdflatex -shell-escape'. Sometimes it is also named 'write 18' or something like that. Or maybe the command simply failed? Error messages can be found in 'tikzfiles/nistco2-figure0.log'. If you continue now, I'll try to typeset the picture.

В файле tikzfiles/nistco2-figure0.log нашёл только одну ошибку

! TeX capacity exceeded, sorry [main memory size=5000000].

Но tikzexternalize же для того и есть, чтоб такого не было, если правильно понимаю

Собственно если строить один график на весь документ из примерно 2К точек, то всё работает. Проблемы начались именно тогда, когда их стало много. Прочитал, что нужно использовать tikzexternalize, а оно не заводится

pdfTeX 3.14159265-2.6-1.40.20 (TeX Live 2019/Debian)
kpathsea version 6.3.1
Compiled with libpng 1.6.37; using libpng 1.6.37
Compiled with zlib 1.2.11; using zlib 1.2.11
Compiled with xpdf version 4.01

UPD: выяснилось, что увесистые графики лучше строить помощью внешних программ и затем вставлять их в документ.

Присоединяюсь к вопросу о колличестве точек - если это не спектр, то столько явно не нужно. К тому же выходной файл, если он в векторе, будет очень тяжёлым.

grem ★★★★★ ()
Ответ на: комментарий от Dark_SavanT

Суть в том, что таких графиков будет несколько. Пусть в этом графике будет их 1К, но таких графиков будет ещё много. Как я понял, без экстерналайза он весь файл обрабатывает в одной работе, так что проблема останется.

Architector ()

Если уж так хочется строить графики именно в pgfplots, то осваивай lualatex. У него ресурсы так не ограничиваются, как у pdflatex. Но я бы советовал генерировать рисунки в формате PDF внешним софтом и вставлять пакетом graphicx. В качестве внешнего софта прекрасно справится R с его ggplot2 или питон с его matplolib, ну или gnuplot.

TeopeTuK ★★★ ()
Последнее исправление: TeopeTuK (всего исправлений: 2)
Ответ на: комментарий от Architector

Может быть тебе подойдёт Gnuplot? Он может сохранять графики в PDF.

$ cat trt.gp
set terminal pdf size 20cm,15cm font 'Liberation Serif,20'
set output 'trt.pdf'
set title 'Data'; set xlabel 'x'; set ylabel 'y'
set datafile separator ','
plot 'trt.csv' using 1:2 with line lt -1 lw 0.10 notitle

$ gnuplot trt.gp

Как выглядит. Любые параметры графика настраиваются.

Matplotlib, да, тоже может сохранять PDF и в освоении наверное даже проще будет, чем Gnuplot, но надо немножко знать питон, чтобы загрузить CSV без дополнительных модулей (например pandas).

anonymous ()
Ответ на: комментарий от TeopeTuK

Просто привык там строить графики для pdfок - удобно, прямо здесь же, где и сам текст.

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

Только вот я так и не понял - в чём всё-таки ошибка?

Architector ()
Ответ на: комментарий от Architector

Ошибка в том, что у pdflatex не хватает ресурсов, чтобы обработать твой большой набор данных. pdflatex не способен использовать всю доступную память, скажем. Он просто был написан давно, когда компьютеры были маломощными, и в нем реализовали много разных ограничений, в частности по объему используемой памяти. Для твоей задачи это ограничение оказалось критичным.

TeopeTuK ★★★ ()

Вы планируете разглядывать этот график в электронном документе?

Тогда pdf не лучший формат для такой цели.

Если печатать, то на чем?

Для оверплотинга есть соответствующие виды графиков. Наверное стоит их хоть немного изучить прежде чем тут «упиваться победой на ТеХ». У такой «победы» крайне странный для окружающих «запах».

psv1967 ★★★★★ ()