LINUX.ORG.RU
ФорумTalks

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

 , ,


1

2

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

★★★★★
Ответ на: комментарий от Eddy_Em

Есть Octave же!

Это для изнасилованных в детстве матлабом же!

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

Ещё раз: жалкие десятки рядом с сотнями тысяч. Как ты прореживать будешь? А среди жалких десятков важна буквальная каждая точка.

Evgueni ★★★★★
()

Какая лютейшая жесть %)

А можешь экспортировать данные в .csv и выложить/высласть? Хочу потренироваться в вело-рисовании.

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

Я ж тебе и сказал: ранжирование. Разделяешь точки на группы, адаптивно прореживаешь для достижения более-менее одинаковой плотности отображения.

Eddy_Em ☆☆☆☆☆
()

Зачем это все? Гистограма из пары десятков бинов моделируется с помощью двух известных распределений (с известной функцией плотности) и для этого надо 32 мегабайта данных в deflate внутри pdf. Долбанный стыд. Да кусочно-линейно нарисуй свои плотности, интервал кусков по оси Х равен размеру бина в гистограме. Будет стильно модно и молодежно. Ну пол бина на крайняк.

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

Что "оно"? Octave? Сфигали "оно"? И почему это октаве помирать? Среди простых лучше инструмента просто нет!

А пхытон — это блевотное дерьмо.

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

Кто в матлабе кодил - тот в цирке не смеётся. А этот хлам в виде октавы от него отличается только тем, что ещё более убог. Нечего тут на пистон бочку катить, с больной головы на пришибленную.

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

Нет, подключай mathGL и строй на здоровье.

Ну или можно экспортировать данные в файл и построить график напрямую гнуплотом (т.к. гнуплотский интерфейс октавы не реализует весь функционал гнуплота).

А calc — говно, про которое нужно забыть как о страшном сне! И вообще стараться не пользоваться всякими либрами-шмыбрами.

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

А calc — говно, про которое нужно забыть как о страшном сне

Вот поэтому и спрашивал мнения людей о вот этих всех штуках, ибо самому надоело...а учиться хочется под ту платформу, которая не потребует дофига программирования, ибо я гуманитарий с любовью к gnu/linux :)

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

гуманитарий

Тогда нафиг тебе все эти графики? Гуманитарию хватит пачки бумаги, карандаша и стерки! А если этот гуманитарий — философ, то стерка ему нафиг не нужна.

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

Хотя мне что-то подсказывает, что построить красивый график в октаве сложнее, чем в calc...

Не слушайте Эдичку, у него Стокогльмский синдром от матлаба.

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

Вот поэтому и спрашивал мнения людей о вот этих всех штуках, ибо самому надоело...а учиться хочется под ту платформу, которая не потребует дофига программирования, ибо я гуманитарий с любовью к gnu/linux :)

Как ни крути, а описание построения графиков и обработки данных на специализированном языке - это программирование. Такой подход просто наиболее эффективен для этой задачи. Какой язык выбрать, Python или R? Думаю, для вас без разницы. Это в большей степени вопрос удобства синтаксиса, ответ на который для каждого свой.

Шутка. Синтаксис питона рулит, конечно же. ☺

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

Вот, для примера, пара вариантов кода на питоне под ваш случай. Самый простой:

import numpy as np
import matplotlib.pyplot as plt
data = np.loadtxt('myfile.csv') # Загружаем csv в двумерный массив
data = data.transpose()         # "Поворачиваем" его на 90°. Так удобнее индексировать.
plt.plot(data[0], data[1])      # Строим график зависимости второй строки от первой.
plt.savefig('fig1.png')         # Сохраняем картинку в файл.
Добавим чутка наворотов:
import numpy as np
import matplotlib.pyplot as plt
data = np.loadtxt('myfile.csv')                                 # Загружаем csv в двумерный массив.
data = data.transpose()                                         # "Поворачиваем" его на 90°. Так удобнее индексировать.
x, y = data[0], data[1]                                         # Назначаем переменные.
fig = plt.figure(figsize=(5,3))                                 # Создаём объект рисунка и задаём его размер в дюймах.
ax = fig.add_subplot()                                          # Добавляем на него оси.
ax.set_title('Figure title', loc='left')                        # Добавляем заголовок.
ax.xaxis.set_ticks_position('bottom')                           # Убираем отметки с верхней
ax.yaxis.set_ticks_position('left')                             # и правой осей,
ax.spines['right'].set_color('none')                            # и прячем сами эти оси.
ax.spines['top'].set_color('none')                              #
ax.set_xlabel('Independent variable')                           # Назначаем подписи к осям.
ax.set_ylabel('Dependent variable')                             #
ax.xaxis.set_major_locator(matplotlib.ticker.MaxNLocator(4))    # Уменьшаем число отметок на осях до 4.
ax.yaxis.set_major_locator(matplotlib.ticker.MaxNLocator(4))    # 
ax.plot(x, y, color='#FF0000', linewidth=2, label='Red line')   # Строим графак с заданным цветом, толщиной линии и именем.
ax.set_xlim(0, x.max())                                         # Задаём границы по осям: от нуля до максимальных значений
ax.set_ylim(0, y.max())                                         # наших данных.
ax.legend(loc='upper right', framealpha=0)                      # Добавляем легенду, фиксируем её положение и прячем рамку.
fig.savefig('fig1.pdf', transparent=True, dpi=300)              # Сохраняем в вектор с прозрачным фоном и заданным DPI.
По-моему, всё вполне понятно, разобраться легко.

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

Зачем это все? Гистограма из пары десятков бинов моделируется с помощью двух известных распределений (с известной функцией плотности) и для этого надо 32 мегабайта данных в deflate внутри pdf.

Какие ещё данные? Это чисто кривые столько места занимают.

Да кусочно-линейно нарисуй свои плотности

Там так и сделано. Только вместо plot использован fill_between, чтобы площадь компонент и их пересечения на глаз легче прикинуть было.

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

ООо здорово :))

Ну я вот сейчас активно изучаю LaTeX....и надо сказать, что даже без комментариев до меня доходит, зачем нужен тот или иной параметр...хотя...хм...способностей к программированию у меня нет. TeX сам лично принимаю как «язык программирования», который (слава богу) понимаю и даже запомнить могу.

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