LINUX.ORG.RU
ФорумTalks

Чем бы оптимизировать жирнючую PDFку?

 , ,


1

2

Есть такая проблема: matplotlib на некоторых типах графиков генерит чудовищно тяжеленный вектор (пример). Такие файлы очень долго открываются, а их растеризация ghostscript'ом - занятие для крайне терпеливых. Можно ли их как-то привести в божеский вид? Пробовал pdfsizeopt, эффект нулевой.

★★★★★

Надо применять другой принцип отображения. Если проблема в очень большом числе точек, то есть варианты когда вместо самих точек рисуется плотность. Для линий в принципе тоже самое, только «разрешение разбиения» для подсчета точек повыше поставить.

Это если хочется всё отобразить.

Также делают умный субсет, который оберегает крайние случаи и не даёт перебрать «основной массы» того что надо отобразить.

Можно просто агрегировать данные и по графику рисовать уже агрегаты придумав как их поинтересней отобразить.

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

Надо применять другой принцип отображения. Если проблема в очень большом числе точек, то есть варианты когда вместо самих точек рисуется плотность.

Тут дофига весят заполненные области. Отказываться от них не хочется, к тому же, я не совсем понимаю почему они получаются НАСТОЛЬКО тяжёлыми. И что в даном случае имеется в виду под плотностью?

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

Уменьшить количество точек.

Тогда линии плавными не будут.

Axon ★★★★★ ()

ТС, убей себя. Зачем тебе столько точек?

soslow ()

А если на основе сего вывода «перерисовать» в inkscape?

P.S. Извини, если что. Хочу сам освоить matplotlib....времени все не хватает.

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

А если на основе сего вывода «перерисовать» в inkscape?

Это как?

Axon ★★★★★ ()

Открыл в инке- (меню: файл - подчистить документ) - пересохранил, 1,7мб.

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

Кстати это тоже неплохая идея, ведь есть просто трасеры которые векторизируют картинку. То есть:

тяжелыйвектор -> растр -> трасер -> легкий вектор

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

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

psv1967 ★★★★★ ()

У меня матплотлиб последний монстроплот вообще отказался рисовать (в png, даже не в pdf) пока я не добавил

plt.rcParams['agg.path.chunksize'] = 10000 

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

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

У меня матплотлиб последний монстроплот вообще отказался рисовать (в png, даже не в pdf)

Фигасе. Не встречал такого.

К чему это я - кривой он и глючный

А мне нравится. Местами есть шероховатости, но для меня не критичные.

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

О, добрый чел!

Скажи мне, а изучать matplotlib несложно? Не надо весь питон учить для него?

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

Местами есть шероховатости, но для меня не критичные.

Ну не знаю, то что он тебе тут сейчас производит, это по моему мнению уже не «шероховатость», а «пора бить разработчиков этого *». Еще выбешивает документация. Ее писал упоротый наркоман, я в жизни ничего такого путанного не встречал. Тонны дублирующей информации, найти что-то полезное невозможно в принципе, лучше сразу SO запросами долбить. После ggplot2 и r base plot от этого плакать хочется крокодильими слезами. Но иногда таки использую для разминки, авось пригодится.

ptarh ★★★★★ ()

сделай из такой картинки png достаточного разрешения -> профит

P.S. Я с подобным столкнулся, когда картинка представляла из себя скопище из полумиллиона точек. 99% в основном кучковались в двух местах, где сливались в толстые кляксы. Интерес представлял естественно оставшийся 1% — для его отображения хватило 200 dpi.

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

Скажи мне, а изучать matplotlib несложно? Не надо весь питон учить для него?

Смотря на каком уровне. Чем лучше у вас с питоном, тем больше профита от matplotlib'а. Опять же, глупо использовать matplotlib и не использовать numpy+scipy.

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

Ну не знаю, то что он тебе тут сейчас производит, это по моему мнению уже не «шероховатость», а «пора бить разработчиков этого *».

Откровенно говоря, с дискретизацией я, и правда, переборщил. Раз в сто.

Еще выбешивает документация. Ее писал упоротый наркоман, я в жизни ничего такого путанного не встречал.

Вот тут отчасти согласен, организация документации оставляет желать лучшего. Я в запущенных случаях вбиваю в гуглокартинки словесное описание желаемого, ищу в выдаче похожее и курю код.

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

сделай из такой картинки png достаточного разрешения -> профит

Какой, на фиг, профит, если мне вектор нужен?

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

Сколько всего точек по оси абсцисс? Ты уверен, что тебе нужно больше одной на пиксель для гладкости? Или сколько их у тебя получается?

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

Pandas, numpy, scipy, mpl - джентельменский набор для анализа данных под пистоном. Pandas простенькие графики через mpl умеет рисовать и через свои методы, часто mpl можно даже не трогать.

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

Для того чтобы распечатать/презентовать тебе на самом деле не нужен вектор — ориентируйся на растр необходимого тебе устройства.

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

Зачем тебе вектор в pdf? Если просто хочешь предоставить все данные, то для этого их отдельно таскают в файлах названных «suplimentary data».

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

Pandas жырный и мне пока что ни разу сильно не пригодился. Но полезностей там много, не спорю. Держу на всякий случай.

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

Для того чтобы распечатать/презентовать тебе на самом деле не нужен вектор

Для того, чтобы отправить в журнал, нужен.

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

А что если в svg?

А в svg оно ещё тяжелее, к тому же, поддержка svg в софте такая говённая, что в каждой программе он рендерится по-разному. И, что критично для меня, scribus не умеет встраивать svg в pdf как внешний ресурс, только через импорт.

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

Ну тогда в чём проблема? Отправляй то, что есть — они там сами будут мучиться. Им не впервой файлики размеров в десятки мегабайт сливать.

Как вариант спроси их на предмет растеризации по месту — уверяю тебя 1200 dpi — это максимум, который сейчас вообще хоть где-то при публикациях применяется, а какой-нибудь FrameMaker замечательно его скушает (не говоря уж о pdflatex).

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

И да, если хош приключений — натрави на картинку какой-нибудь автоматический векторизатор типа autotrace

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

Pandas, numpy, scipy, mpl - джентельменский набор для анализа данных под пистоном.

Меня интересовал matplotlib как инструмент для визуализации данных only. Например (хотя могу ошибаться) через .csv-шные файлы выводить график.

Остальной зоопарк операций я проделываю в SPSS, просто он не умеет нормальные графики строить...это ужос и кошмар получается. А тут судя по пдф-ке очень годно и красиво.

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

Ну тогда в чём проблема? Отправляй то, что есть

Мне удобнее отдельные блоки делать в matplotlib, а компоновать их уже в скрибусе. Проще вносить мелкие исправления и обновлять частями.

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

Это не тулза с одной кнопкой. Данные нужно импортировать, перегнать в вид, с которым можно работать а уж потом браться за matplotlib. Ну и для самого matplotlib нужно, как минимум, знать базовые control flow tools пистона, уметь лихо индексировать и прочее.

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

Меня интересовал matplotlib как инструмент для визуализации данных only. Например (хотя могу ошибаться) через .csv-шные файлы выводить график.

Чистым матплотлибом csv не прочитать, в нём только средства визуализации. csv можно распарсить либо модулем CSV, либо, в сто раз проще, при помощи numpy. И я бы на вашем месте, всё-таки, присмотрелся к scipy, оно очень годное.

Axon ★★★★★ ()
Последнее исправление: Axon (всего исправлений: 1)
Ответ на: комментарий от bookman900

Смотри в сторону R и забудь SPSS как страшный, хоть и вполне рабочий, сон.

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

matplotlib умеет растеризацию отдельных графиков. например, plot( X ,Y, ',' , rasterized=True ) — для массива точек самое то.

thunar ★★★★★ ()
Последнее исправление: thunar (всего исправлений: 3)
Ответ на: комментарий от Evgueni

Утраиваю этого оратора. Для социологии (а эксель на стероидах под названием SPSS используют только там по непонятным мне причинам) R явно подходит лучше. Тулзы для визуализации более зрелые и удобные, пакеты для статистики покрывают куцый набор пистона, как бык стадо, а после знакомства с tidyr/dplyr/magittr начинается магия. Ну и весь toolchain вокруг лучше: Rstudio отличная IDE для анализа данных, а на кривая поделка, как Spyder, Rmd просто работает, система пакетирования не норовит поставить все раком и т.д.

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

в нём только средства визуализации

Вот это я и хотел понять, спс :) Numpy возьму на заметку :)

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

Я понял...но я сейчас редко пользуюсь SPSS. Поэтому мне нужен был онли визуализатор вне libreoffice/excel. Но если в R все так «великолепно», что ж, придется учить весь r.

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

Ну, все нормальные средства визуализации в ЯП, а ЯП сам за тебя ничего не сделает. К тому же, визуализация таки самый последний шаг в большинстве случаев и о ней нужно думать еще на этапе анализа данных, если ты не делаешь тупо lineplot/barplot/hist от всего вектора. Впрочем, такое в R не просто, а очень просто, хватит загрузки csv и однострочника с подписями для x/y-axis.

но вот тебе на затравку: тыц, тыц2, тыц3. базовая/ggplot2/lattice

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

Вроде же в SPSS R уже добавили, так что они явно на пути к исправлению...

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

Это давно тенденция, добавлять интерфейсы к R. Впилили в пистон, в матлаб, в Julia, в mathematica, SAS и кучу других. Когда стало ясно, что по статметодам его догнать уже нет никаких шансов :) Но имхо, когда такое делают другие пакеты для статистики, то это смахивает на капитуляцию. С таким же успехом могут и прикрыть свои велосипеды.

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

Если я правильно понимаю, то всё-таки изначально всё стартовало с S и SPSS является одной из коммерческих его реализацией. Так что база с R де факто одна и та же. Основной «дьявол» таки сидит в сообществе, причём не в «сообществе пользователей», а в «сообществе исследователей».

К чему это я: молодцы новозеладцы!

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

базовая

Если честно, то у меня нету прикладного социологического базиса. Совсем. Я не очень в матане и функциональном программированнии в особенности

Но...

ggplot2

Порадовал тем, что там синтаксис для меня будет понятным

lattice

тоже синтаксис без освоения мне понятен

А вообще задача была простая: есть таблица стат данных (из статистического агенства), есть посчитанные средние, стд.откл и прочее...и эти данные я хочу визуализировать не средствами calc, а дркгим способом. Поэтому все и пытался понять, насколько мне matplotlib мог бы помочь.

bookman900 ★★★★★ ()
Последнее исправление: bookman900 (всего исправлений: 1)
Ответ на: комментарий от Evgueni

Да, но как я понимаю, только R развивался дальше, как ЯП, а остальные были в основном озабочены тем, что натягивали морды и кнопочки рисовали. Результат очевиден.

К чему это я: молодцы новозеладцы!

Community у R просто отличное, особенно hadley wickham радует безмерно. Все его пакеты нужно брать в стандартную поставку без раздумий.

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

Ну, загонишь данные в data.frame и в ggplot2. Если оно там по факторам разбито, то он тебе тут же и gridplot (facets) сделает. Куда веселее, если тебе нужно самому эти данные высчитывать, тут R может сэкономить адскую кучу времени. Кроме того, при определенных типах графиков в ggplot2 он mean, std и прочие обиходные вещи высчитает и вставит тебе сам. Единственное что нужно держать в голове - он рассчитан на определенную структуру данных (tidy data, если быть точным) и иногда быстрее загнать в стандартный plot через loops и прочее, чем приводить данные в надлежащий вид.

ptarh ★★★★★ ()

А зачем ты график из десятков тысяч точек строишь? Прореживай перед тем, как сохранить.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от bookman900

Ты думаешь, есть смысл насиловать свой мозг говнопхытоном? Есть Octave же!

Eddy_Em ☆☆☆☆☆ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.