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)
Ответ на: комментарий от AntonI

Зато я увидел что origin не портирован под linux

Вам линукс нужен, или проф. инструмент? А насчет качества, ни разу не слышал, чтобы кто-то ныл, что качество его не устраивает.

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

А матплотлиб умеет все описанное?

Же.

В нём самое ценное то что всю обработку можно сделать в том-же numpy, без промежуточного шага. А для правильного теха:

TeX_preamble =\
r"""
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{gensymb}
\usepackage{chemformula}
\usepackage[separate-uncertainty=true]{siunitx}
"""

import matplotlib as mp
mp.rc("font",  **dict(size=8,family="serif",serif=["Computer Modern"]))
mp.rc("lines", **dict(linewidth=0.5))
mp.rc("text", usetex=True)
mp.rc("text.latex",preamble=TeX_preamble)

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

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

Сперва добейся?

«Origin is a superb graphing suite as it is both easy to use and is capable of creating presentation and manuscript quality figures. The interface is in many ways intuitive and makes customizing figures a cinch. Origin has been my go-to graphing software and I recommend it as a must-have to new graduate students.»

Bryan S. Beckingham

LAWRENCE BERKELEY NATIONAL LABORATORY

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

Последние 20+ лет я работаю под linux, винды у меня нет и не предвидится. «Проф инструмент» больше похоже на неуклюжий маркетинг, особенно в свете того что Вы таки не понимаете что такое «типографское качество».

Ну и судя по тому что Вы не ответили на вопрос про свой универ и про число статей - осмелюсь предположить что статей у Вас нет, весь Ваш универ сидит под виндой, а диплом Вы вообще в ворде пишете (или будете писать).

Поправьте меня, если я ошибаюсь.

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

Кое кто из коллег сделал годную оболочку для матплотлиб. Я в общем глубоко в него не влезал, юзал немного для построения срезов на лету.

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

Но тем не менее - все таки верстка это отдельная операция. Совмещать ее с собственно построением графка не айс, приходится думать не только о том какие данные показать но и как их красиво оформить.

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

Я не спрашивал Вас про статьи Bryan S. Beckingham и про его место работы, я спрашивал Вас про Ваши статьи и Ваш универ.

Это же НЕ Брайн прочитал этот тред и кинулся мне ориджин советовать с юношеским задором;-)

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

Универ там указан. И непонятен твой снобизм, в LAWRENCE BERKELEY NATIONAL LABORATORY используют ориджин и со статьями там все очень хорошо.

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

Мне вот очень интересно, на что вы проедаете гранты от российского правительства? На допиливания кривого инструментария под линукс, вместо покупки проф. софта? А отчитываетесь картинками из гнуплота?

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

Еще раз. Вы заявили что «У нас в универе только его и используют.»(c)

Вы (лично Вы) работаете/учитесь в LAWRENCE BERKELEY NATIONAL LABORATORY? Серьезно?

Есть много мест где используют ориджин (а так же гнуплот, R, матлаб и тд и тп) и есть много мест где хорошо со статьями. Если у Вас в универе была логика, там должны были проходить силлогизмы. Сами сообразите почему Ваш силлогизм «в LAWRENCE BERKELEY NATIONAL LABORATORY используют ориджин и со статьями там все очень хорошо. –> вы должны использовать ориджин» ошибочен?

И непонятен твой снобизм,

У меня нет никакого снобизма. Я задаю Вам простые вопросы, Вы вместо ответа рассказываете про лоуренс лаборатори, цитируете кого то и приводите какие то не5понятные ссылки.

Молодой человек, простите - Вы умеете читать и понимать написанное?

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

Мне вот очень интересно, на что вы проедаете гранты от российского правительства?

Я могу ответить - но Вы не поймете. Будет много незнакомых Вам слов, а у Вас вон с пониманием простых то текстов как то не очень.

И вообще, Лизонька, перелогиньтесь.

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

Самое главное-то ведь то, что если где-то в хорошем месте и используют пропиетарщину, то это совсем повод самому завязывать на неё тулчейн.

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

Скажем у нас в группе со статьями тоже все хорошо, но у нас ориджин не используют.

Судя по всем у это Лиза в гриме. Есть тут у меня одна тайная поклонница которую много раз банили за тупой троллинг. По слогу очень похоже.

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

Из систем пригодных для анализа: R, root и да, да, Python — никуда от него не денешься.

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

mathGL — это очень специализированная утилита, написанная автором «под себя». Подобных инструментов довольно много в этом мире вплоть до отрисовки четырёхмерных пространств.

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

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

Да мне пофиг, на самом деле. Вы - выполняете работу мл. научного сотрудника, который сидит и делает фигню (паяет транзисторы или пилит опенсорс инструменты), но однако получаете зарплату доктора наук и руководителя научным коллективом. Стыдно должно быть перед налогоплательщиками.

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

Да бессмысленно IMHO с подобными индивидами разговаривать. Кто же спорит, что и деревянной ложкой можно котлован нарыть и экскаватором кашу поесть, но зачем?

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

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

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

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

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

Это же Лиза, студентка факультета прикладной математики (возможно уже бывшая) не осилившая что такое функции Грина! По своему не менее эпичный персонаж чем @Eddy_Em.

С тех пор как я, будучи не в настроении, предложил ей поменять специальность на парикмахера - она ко мне питает очень нежные чувства… ;-)

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

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

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

Хорошо что это кто то научно обосновал, спасибо.

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

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

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

Я даже не помню ее прежний ник, она их меняет как перчатки от бана к бану. М.б. @Lzzz, но это неточно.

Кстати, а есть под иксы какая-ни будь утилита для имитации разных colorblind?

Я тоже как то не задумывался, хотя у самого зрение не очень…

PS вот он ПО для SpaceX разработано на С++

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

Вот экономисты серьёзными делами занимаются, им пилить опенсорц некогда, они графики в экселе строют, не то что физики.

Там даже вот такие анекдоты получаются, прям как у студентов на лабах.

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

Да, это уже как то обсасывали в теме про среду разработки. Евгений это как пример того что иксельнинужен приводил.

Интересно, когда ориджин аналогичным образом спалится?;-)

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

Кстати, для себя я нашёл единственное применение экселю (точнее либрекалку) — это сбор разрознённых данных по сечениям (на http://www.lxcat.net/ есть не всё, да). Статей на эту тему много, многие старые и даже в виде сканов, а сечения там даны таблицами. Оказалось, что после распознавания удобно всё это загнать в xls-файл, по страничке на каждый источник — а потом уже считать его из пайтона и спокойно строить аналитические аппроксимации.

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

Я в либрекалке таблицу успеваемости группы веду обычно, если группе студентов преподаю. Так мне текстовый файл + питон гораздо ближе.

Но я знаю геофизиков которые очень лихо и профессионально работают в экселе. Кто на что учился.

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

Я пытался гуглодоковский эксель использовать год назад для «подведения итогов» по всяким там заходам, но мне показалось, что csv и pandas гораздо лучше для такой наколенной статистики.

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

Не, ну онлайновые инструменты это жесть, да. Хотя, опять же для распознавания печатных таблиц использовал онлайновый файнридер.

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

Да почему жесть, примерно как обычный Excel 5 для Windows 3.1. Ну фич меньше, но мне не надо было.

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

У меня кстати mpl начал ругаться на что-то там deprecated в LaTeX preamble.

MatplotlibDeprecationWarning: Support for setting the 'text.latex.preamble' or 'pgf.preamble' rcParam to a list of strings is deprecated since 3.3 and will be removed two minor releases later; set it to a single string instead.

И в коде вот как-то так:

    matplotlib.rcParams['text.usetex'] = True
    matplotlib.rcParams['text.latex.preamble'] = [r'\usepackage[cm]{sfmath}']
    matplotlib.rcParams['font.family'] = 'sans-serif'
    matplotlib.rcParams['font.sans-serif'] = 'cm'
    matplotlib.rcParams['font.size'] = '20'

Наверное надо [] выкинуть вокруг usepackage… или тупо твой код скопипастить.

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

По-моему, вы пытаетесь изобретать велосипед, который не нужен. Конечно, графики не ограничиваются тем описанием. Всегда возникает необходимость где-то добавить эррорбары, где-то маркеры изменяемого размера, где-то линию тренда и текст под углом, пиксельное облако точек, изолинии и пр. В результате из всего этого получится глючный, недоделанный и тормозной клон матплотлиба — и спрашивается, а стоило ли городить огород. Разделение данных/рисунка/подписей прекрасно решается средствами самого пайтона и матплотлиба.

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

Сейчас у меня построение графика выглядит примерно вот так (пусть есть файл a.dat)

$ plt a.dat -sz .7 -to a.pdf

при этом будет запущен gnuplot, его выхлоп будет обработан pdflatex-ом и в итоге сгенерирован файл a.pdf с правильной шрифтовкой, подписями к осям (их вытянет из заголовка a.dat) и т.д. Могут быть и гораздо более сложные случаи включая подписи, кучу кривых и тд и тп. Сюда вместо гнуплота можно без проблем встроить матлоплиб, но это не решает проблем описанных в исходном посте.

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

Если я хочу сделать 6 картинок что бы они были выровнены для вставки в таблицу, мне неизбежно придется обрабатывать их вместе. При этом построение каждой из картинок это отдельная задача, требующая иногда команды занимающей две-три строки терминала, и вообще эти картинки могут делаться в разное время и в разных местах.

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

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

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

размеры придется подбирать экспериментально

Если вы знаете размер шрифта и отступы, то в чём проблема загнать это в функцию?

требующая иногда команды занимающей две-три строки терминала, и вообще эти картинки могут делаться в разное время и в разных местах.

Эм, ну картинка — это же или поле, или кривая — в чём проблема результаты «из разных мест и времён» сохранить в виде numpy-массивов в одном npz [+json с настройками], а потом уже рисовать «в одном месте»? Всё равно перед финализацией текста все картинки лучше пересобирать что бы всё уместилось красиво.

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

Если вы знаете размер шрифта и отступы, то в чём проблема загнать это в функцию?

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

в чём проблема результаты «из разных мест и времён» сохранить в виде numpy-массивов в одном npz [+json с настройками]

  1. я не знаю что такое npz и не использую numpy. Хотя мб и начну

  2. далеко не все результаты лезут в numpy. Кое что приходит в виде картинок. Очень трудно упихать в numpy поле в несколько сот Мб - оно рисуется нашим вьювером. Но при этом оси и пр должны быть.

  3. А есть еще векторные поля, мы их визуализацию только осваиваем но с ними будет совсем весело. Там наложение стрелочек на картинку, причем картинку то можно растягивать/сжимать как угодно а вот стрелочки нет - углы должны сохраняться.

Всё равно перед финализацией текста все картинки лучше пересобирать что бы всё уместилось красиво.

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

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

Это будет огромная потеря для мировой астрономии но хорошее приобретение для зомби. Кроме того у зомби с психикой все в порядке…

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

Естественно: у зомби-то ни головной, ни даже спинной мозг не работают! Они движутся под воздействием спецэффектов ☺

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