LINUX.ORG.RU

Научная визуализация - масштабируемые графики типографского качества?

 , ,


0

2

Как вы знаете, учОные пишут статьи. Как правило получаются какие то данные, на основе этих данных делаются картинки а дальше эти картинки вставляются в статьи, причем один и та же картинка может быть вставлена в несколько разных статей (и презентаций). Дальше будет много букв, но тема сложная, куда деваться;-(

Картинка обычно устроена следующим образом:

  4 +-------------+  +-+ 4
  3 |             |  |P| 3
Y 2 |   графики   |  |A| 2 Z 
  1 |             |  |L| 1 
  0 +-------------+  +-+ 0 
    0  1  2  3  4  
           X

В середине график, вокруг зарамочное оформление (чиселки на осях и метки на осях), сбоку опционально может быть палитра (обозначена PAL, если цветом рисуется функция двух переменных).

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

Шрифтовка это типографское требование, шрифт на картинке должен совпадать со шрифтом в тексте но быть на кегль меньше. Естественно формулы/математические обозначения в метках на осях должны совпадать с текстом, быть красивыми и пр. В журналах как правило требования к размеру шрифту не очень жесткие, но шрифт должен быть визуально приемлемым - не слишком большим и не слишком маленьким. Самая печалька, что на графике тоже могут быть надписи (легенда, кривая какого цвета что значит), и они не должны пересекаться кривыми.

Выравнивание это эстетическое требование. Если мы размещаем несколько картинок рядом (в таблице), то у них должен быть одинаковый шрифт и они должны быть выравнены по графикам (центральным частям). В некоторых случаях, если картинки с одинаковыми пределами по X ставятся друг над другом, то подписи к оси X лучше вообще отключить у всех картинок кроме нижней. Аналогично, если палитры совпадают, то на все картинки можно оставить одну палитру.

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

Поддержку LaTeX-а и правильную шрифтовку умеет делать например gnuplot в режиме epslatex - зарамочное оформление сбрасывается в .tex файл, график в .eps файл. Главный минус такого решения - если картинку начать масштабировать (это сложно, там размеры прибиты гвоздями наглухо, но гипотетически возможно) - то численные подписи к осям могут начать налезать друг на друга. Можно эту конструкцию сразу скопмилять в один .pdf (именно так я сейчас и делаю), но тогла при масштабировании поплывет шрифтовка, да и выравнивание превратится в лютый геморрой (в сложном случае) - понятно что размеры графика в центре при этом теряются. Подписи к оси X / палитру не отключишь.

Хочется некоторый формат для научной графики, отвечающий следующим требованиям:

  1. В файл сохраняются график, палитра (например в .png) + зарамочное оформление в формате (пределы по оси, метка к оси). Понятно что должна быть смотрелка для такого формата на экране.

  2. Есть утилита которая умеет из этого сделать например .png заданного размера с заданным шрифтом, чиселки вдоль осей она расставляет сама так что чиселки не налезают друг на друга. То же самое с подписями на графике.

  3. Та уже утилита умеет сразу сделать выравненную пачку картинок которые тупо вставляются в LaTeX таблицу.

  4. В идеале утилита должна дергаться из теха просто при указании каких то макросов в таблице или при вставке отдельных картинок.

Я такой штуки не знаю, но я ее сильно хочу и наверное готов сделать. Но может что то уже есть готовое?

@Crocodoom, @thunar, @Evgueni


UPD: сухой остаток после раздумий и обсуждения такой.

Можно сделать некий формат для верстки уже подготовленного изображения (т.е. понятно что рисовать и как рисовать, осталось нарисовать красиво). Бонусы в пользу такого решения не очевидны, но они есть - мы разделяем модель данных и представление. Формат должен быть простым и расширяемым.

  1. все что относится к картинке хранится в отдельной директории/tar/tar.gz/zip.

  2. система координат связана с графиком, все меряется в долях графика, (0,0) - нижний левы угол, (1,1) - верхний правый.

  3. текстовый файл axes описывает оси. Каждая ось это одна строка,

x0 y0 x1 y1 min max [logscale] подпись-к-оси

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

  1. текстовый файл paletter задает палитру, в первой строчке
min max [logscale] подпись-к-палитре

во второй строчке сама палитра (цвета через пробел)

  1. изображение лежит в файле image.ppm или любом разумном графическом формате

  2. линии (кривые) лежат в файлах с имя.curve, каждая кривая в своем файле, первая строка #ключ-кривой, дальше в два столбца данные. Пустая строка означает разрыв в линии. Можно сохранять линии в бинарном формате.

  3. можно добавлять векторные поля и всяко разно.

Перемещено Shaman007 из development

★★★★★

Последнее исправление: AntonI (всего исправлений: 3)

Мне кажется тебе надо подняться на шаг выше и работать не с форматированием картинок, а с самими данными.

То есть например сверстать нужные тебе графики в интерактивный вид (linked graphics, масштабирование, выделение и т.п.) с помощью например Bokeh (https://demo.bokeh.org/stocks) и хранить их в таком виде.

А для какой-то конкретной статьи ты можешь выбрать удобное представление этих данных, выбрать какой-то снапшот этого интерактивного интерфейса и его уже использовать в TeX.

alpha ★★★★★
()

По-моему готового решения быть не может, так как во время подготовки статьи и количество кривых может поменяться, и количество панелей, шкала превратиться из линейной в логарифмическую и т.д. Уж не говоря про диапазон аргументов/значений, количестве major/minor ticks и подписей осей.

Я в каждом случае делаю и потом правлю программку (я на IDL в основном, или питон в редких случаях) которая эти самые графики формирует. Если нужно переделать (точнее не если, а когда нужно переделать), то меняем текст программки.

Matplotlib-овская возможность сохранять куда угодно никак не спасает и не помогает.

На выходе eps.

Да, программки для рисования графиков получаются весьма большие (в несколько экранов), но деваться некуда.

sshestov ★★
()
Последнее исправление: sshestov (всего исправлений: 1)
Ответ на: комментарий от alpha
  1. Данных может быть много или даже очень много.

  2. Выбор представления это отдельная работа которую не хочется делать дважды.

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

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

У меня есть обертка для gnuplot которая конфигурируется аргументами командной строки и на выходе дает .pdf типографского качества. Вместе с .pdf она делает исполняемый файлик который можно отредактировать, перезапустить и получить новую версию картинки, если входные данные не протухли.

Но это не решает проблем с выравниванием, да и шрифтовка плавает… приходится каждый раз подбирать.

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

Но это не решает проблем с выравниванием, да и шрифтовка плавает… приходится каждый раз подбирать.

Звучит так, что уже всё что можно автоматизировано и дальше уж никак не автоматизируется.

А вообще жесткие у вас требования… В Astronomy&Astrophysics, The Astrophysical Journal и Solar Physics почти никаких требований к картинкам нет. Люди прям скриншоты фигачат.

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

всё что можно автоматизировано и дальше уж никак не автоматизируется.

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

А еще есть необходимость автоматом перегенерить картинки когда данные поменялись;-) Но это отдельная тема…

А вообще жесткие у вас требования…

Я когда то работал верстальщиком в МАИК, там меня наверное испортили;-)

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

Ты в gnuplot-e делаешь отдельные рисунки для многопанельных графиков? Я насобачился и теперь сразу готовлю целый рисунок, даже если там несколько панелей (конечно сперва пришлось помучаться).

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

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

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

Да, я их по отельности делаю, мультиплотом я когда то владел но забыл. Но и мультиплот ЕМНИП не решает проблем с выравниванием.

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

Вот именно multiplot кажется и решает проблемы с выравниванием. Не знаю, мож он в гнуплоте другой; но в моем языке (и по-моему матплотлибовский субплот) как раз именно это и делает - точно позиционирует график, а не его шкалы.

sshestov ★★
()

На вашем месте я посмотрел бы в сторону R, графика она из сильных сторон этого языка.

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

Например: https://www.statmethods.net/advgraphs/images/layout1.jpg

Шрифтовка это типографское требование, шрифт на картинке должен совпадать со шрифтом в тексте но быть на кегль меньше. Естественно формулы/математические обозначения в метках на осях должны совпадать с текстом, быть красивыми и пр.

Для R есть вывод в Tikz: https://cran.r-project.org/web/packages/tikzDevice/vignettes/tikzDevice.pdf. Где проблема шрифта решается средствами латеха.

Ну и для красоты можно использовать библиотеку ggplot2: https://www.r-graph-gallery.com/ggplot2-package.html.

При желании можно использовать шаблон и используя пакет knitr делать красивые отчеты в R и латехе.

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

Я понимаю твою идею. Но мне кажется что работа по вёрстке картинки для статьи/книги заключается не в шрифтах на осях картинки, а в выборе варианта самой картинки.

Грубо говоря картинка которая подходит на формат A4 не годится для формата журнальной колонки, даже если её уменьшить и отмасштабировать шрифты. Там нужен другой вариант картинки который вместо попытки показать всё сразу, будет делать crop на отдельный участок, ну или например подсветит только два тренда вместо всех, либо заменит bar chart на pie chart и т.п.

Желание сделать один раз - понятно, но задаче сделать высококачественную графику оно противоречит, и реальные дизайнеры инфографики так вообще говоря не делают.

alpha ★★★★★
()
Последнее исправление: alpha (всего исправлений: 1)

Храню все графики в виде raw-данных и скрипта для рисования. Кегль, шрифт, отступы и пр. вынесены в **kwargs.

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

либо заменит bar chart на pie chart

Pie chart считается моветоном при представлении данных.

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

Это дефолтное размещение, оно гибко настраивается.

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

Но мне кажется что работа по вёрстке картинки для статьи/книги заключается не в шрифтах на осях картинки, а в выборе варианта самой картинки.

Это не верстка а написание статьи/книги. Это то что перед версткой.

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

R может при выгрузке в tikz автоматом расставить чиселки так что бы они не налезали друг на друга?

AntonI ★★★★★
() автор топика

А чем плох matplotlib (ну кроме того, что очень медленный для 2D)?

Так 1–2 есть в http://root.cern: сохраняешь канву в .root, потом откываешь и пересохраняешь в eps или png

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

А матплотлиб умеет все описанное? Я его плохо знаю, все как то с гнуплотом…

ROOT посмотрю, спасибо

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

Это просто библиотека под питон, так что логику надо писать самостоятельно (например на pandas или numpy), но вот именно одномерные картинки на мой вкус получаются красиво.

А ROOT в некотором смысле тоже обёртка (над питоном ли, либо над плюсами в виде cling или даже нормлаьного такого бинарника), но многие манипуляции можно делать прям на лету, и двумерные распределения он строит довольно шустро (если только в IO нет затыка). Получается, правда, вырвиглазно, но мы же не девочки.

luke ★★★★★
()

Не нужно пытаться натянуть сову на глобус!

Под каждый конкретный случай нужно готовить соответствующий график, чтобы было красиво и шрифты сильно по размеру не отличались.

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

Это просто библиотека под питон, так что логику надо писать самостоятельно

Ну вот… речь о том, что бы написать логику один раз и больше с этим не связываться.

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

Зачем делать вырвиглазно когда можно сделать красиво?;-)

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

Ну вот… речь о том, что бы написать логику один раз и больше с этим не связываться.

Я думал об этом. В реальности каждый раз приходится по своему изворачиваться для очередной картинки.

Пандасы хороши тем, что можно их сохранять в латеховскую табличку, и тут же нарисовать график в matplotlib.

Зачем делать вырвиглазно когда можно сделать красиво?;-)

Там главный затык в шрифте, я так и не осилил как воткнуть туда computer modern, а гельветикой статьи я набирать точно не собираюсь. Всё хочу сделать конвертер из рута в matplotlib, но это даже не в первой десятки приоритетов у меня.

А по поводу гнуплота у нас тут один проф (Бастиан Мэркиш) хвастался на этаже, что он кучу этого самого гнуплота за десять лет переписал и перекоммитил (типа одной трети). Только вот я чёт его не могу найти в списке авторов :)

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

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

Я своей оберткой для гнуплота обхожусь. Она правда на питоне написана и такая… довольно толстая.

он кучу этого самого гнуплота за десять лет переписал и перекоммитил

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

AntonI ★★★★★
() автор топика

Простые картинки я по привычке рисую в Metapost. Если картинки выдаются внешними источниками aka root (в моей области знаний это стандарт, хотя его я бы не рекомендовал бы использовать если вас не вынуждают или если данные в память компьютера уже не влазят), то убираю все подписи и добавляю их вручную через тот же самый Metapost. Естественно для всяких отчётов этого делать не нужно — и так сойдёт.

Сейчас бы я использовал tikz/pgf как минимум для добавления подписей, но и рисование там весьма продвинутое. Возможно переучусь со временем.

Можно так же посмотреть в сторону R. Там весьма продвинутые средства для рисования разного рода графиков помимо того, что это профессиональный инструмент по обработке статистики.

gnuplot годится IMHO только для простых графиков и возни с ним не меньше чем в случае root если хочется эти самые графики разукрасить. Так что имеет смысл его использовать только если знаком с этим инструментом и его вывод устраивает.

И да, сделать график, который выглядит хорошо абсолютно при любом разрешении IMHO утопия. Шрифты придётся масштабировать при любом раскладе.

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

В примере по ссылке выше не вылезают. У меня происходило смещение чисел если я пытался экспортировать графику из inkscape. В R я не помню такого, но и tikzdevice давно не использовал.

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

А ROOT в некотором смысле тоже обёртка (над питоном ли, либо над плюсами

А ядро linux это обёртка над си 🤡

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

Простые картинки (типа такого — в принципе простые графики там можно рисовать) и подписи, а графики/гистограммы рисуются в root.

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

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

Не понял, есть же set xtics auto. Или ты делаешь картинку настолько мелкой, что да же пять тиков наползают друг на друга?

JaM
()

Как я понимаю, все четыре твоих задачи (кроме смотрелки на экране) решаются написанием некоторой обёртки вокруг собственно программы, рисующей график. За программу ты взял гнуплот. Ок, но я не понимаю, какие проблемы у тебя с ним возникают? Размер шрифта там задаётся, посчитать ты его можешь в обёртке исходя из требуемого размера рисунка. Multiplot и set origin тебе дадут нужное выравнивание. Про проблему с тиками вообще не понял, если меняется интервал на оси, так есть set xtics auto, а если картинка мелкая, а шрифт большой, и подписи тиков налазят друг на друга, то уверен ли ты, что всё делаешь правильно?

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

Если картинки выдаются внешними источниками aka root (в моей области знаний это стандарт, хотя его я бы не рекомендовал бы использовать если вас не вынуждают или если данные в память компьютера уже не влазят), то убираю все подписи и добавляю их вручную через тот же самый Metapost.

Зачем?

Сейчас бы я использовал tikz/pgf как минимум для добавления подписей, но и рисование там весьма продвинутое.

pgfplots, что ли? Нирикаминдую.

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

Чтобы шрифт в тексте и в рисунках совпадал.

Рисунки != графики. Последние следует рисовать в специализированных приложениях.

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

Потому что когда я наработал эту привычку pgf/tikz был ещё в пелёнках или даже не родился, а MetaPost уже стабилизировался.

Та же засада у меня с perl/python. Последний популярней сейчас, но я лучше знаю первый ☹

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

Multiplot и set origin тебе дадут нужное выравнивание

Не дадут, см исходный пост.

то уверен ли ты, что всё делаешь правильно?

Да.

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

В этом смысле gnuplot крайне нестабилен. Его удел генерёжь картинок для медленного контроля для дальнейшей демонстрации их в браузере. Он там к месту, хотя и альтернатив сейчас в этой сфере дофига.

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

гнуплот генерирует классные векторные графики: в eps или svg (svg затем легко перегоняется в pdf). Просто под конкретный макет надо генерировать конкретный график. Универсальное не получится.

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

На фоне аналогов он ничем не выделяется в области качества и разнообразия графиков. Я бы даже сказал качество уже ниже среднего (разнообразие это вообще слабое место gnuplot) в частности потому, что отсутствуют продвинутые средства обработки данных, что делает необходимым использовать ещё что-нибудь до собственно gnuplot. Тот же R лучше gnuplot в плане рисования графиков во всём кроме разве что размера бинарника. Да что там R, даже root лучше хотя и толще.

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

А какие есть аналоги? Я знаю только mathGL, но он вроде как до сих пор сырой. Гнуплот же отлажен до мелочей и на нем чего только ни сделаешь! Правда, я редко использую гнуплот непосредственно (разве что в скриптах формирования графиков для веб-морд), обычно для всяких статей/отчетов рисую из Octave — через ее интерфейс к гнуплоту.

Пытхон я по понятным причинам не использую, так что с матплотлибом знаком лишь понаслышке.

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

Главное, что умеет «графики типографского качества», что не умеет ТС со всем своим инструментом. У нас в универе только его и используют. Насчет автоматизации, я хз. С матлаб умеет работать, с LabView, с R - это сойдет за средство автоматизации?

Djanik
()

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

Требует усилий по организации и нелени (типа «тут всего то на пять минут работы и так сойдет»)

PS

Если это что то «чужое», то просто «забейте» (ну один раз скажите дав ссылки, а дальше пусть пердоляться в своем ворде сколько хотят, ваши посланные результаты через pandoc отконверченные они воспримут как норму).

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

Я посмотрел сайт origina-а и не увидел там ничего такого, чего не умел бы тот же гнуплот и его аналоги. Зато я увидел что origin не портирован под linux (нужен wine) и вообще проприентарщина.

Вы уверены что правильно понимаете смысл фразы «типографское качество», поняли о чем вообще был исходный пост и что именно я умею/не умею?;-)

У нас в универе только его и используют.

Что за универ если не секрет? И сколько лично Вы написали статей в реферируемеые журналы за последний год?;-)

AntonI ★★★★★
() автор топика
Ответ на: мальчики-девочки, раз уж мы про графики от sshestov

Эммм…. палитра это ломаная линия в RGB кубе. Обычно она на поверхности куба расположена, но понятно что серая идет по главной диагонали.

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

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