LINUX.ORG.RU

Gnuplot: цвет точек графика из файла

 , ,


0

2

Всем привет!

Файл temp.dat содержит 3 колонки с данными: 1, 2 определяют координаты точек на плоскости, 3-я колонка имеет формат #?????? в 16-ричной с/и, где ? принимает значения от 0 до F, и определят цвет точки.

Исходя из мануала gnuplot и интернета, команда должна выглядеть примерно так:

plot «temp.dat» u 1:2:(3) w p lc rgbcolor var plot «temp.dat» u 1:2:(3) w p lc rgb var plot «temp.dat» u 1:2:(3) w p lc var

Ни черта не работает.

  1. без скобок вокруг 3:

warning: Skipping data file with no valid points

  1. lc rgbcolor \ rgb var:

все точки чёрные

  1. lc var:

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

Кто знает, как пофиксить? Спасибо!


3-я колонка имеет формат #?????? в 16-ричной с/и, где ? принимает значения от 0 до F, и определят цвет точки

Не знаю, можно ли научить gnuplot понимать этот формат. # для него по умолчанию становится comment character, и вообще lc rgbcolor var ожидает целые числа в третьей колонке. Если заменить # на 0x, оно работает с using 1:2:3 lc rgbcolor variable.

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

Спасибо за ответ!

«Целые числа в 3-й колонке», имеете в виду, в десятичной СИ?

Переформатить весь файл с ~200к строками таким образом, чтобы #000000 конвертировать в 0x000000 можно как нех. Вопрос остаётся: должно быть using 1:2:3 или 1:2:(3)? И ещё, какую роль играет rgbcolor в lc rgbcolor variable и можно ли писать проще lc rgb variable?

Кстати, если интересно, то я нашёл решение проблемы спустя 6 часов поиска [!!!] в сети:

https://gnuplot-surprising.blogspot.com/

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

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

«Целые числа в 3-й колонке», имеете в виду, в десятичной СИ?

Самый простой способ, который рекомендуется в help rgbcolor - записать их 16-ричными целыми, 0xRRGGBB. Хотя gnuplot съест и десятичные целые (а потом внутри себя поделит на байты и интерпретирует как надо).

Переформатить весь файл с ~200к строками таким образом, чтобы #000000 конвертировать в 0x000000 можно как нех

Я бы поступил именно таким образом, если не придут более знающие специалисты по gnuplot. (Я давно им не пользовался, мог забыть какой-то способ заставить его прочитать данные именно в формате #RRGGBB.)

Вопрос остаётся: должно быть using 1:2:3 или 1:2:(3)? И ещё, какую роль играет rgbcolor в lc rgbcolor variable и можно ли писать проще lc rgb variable?

Только 1:2:3. (...) значит «посчитать значение выражения», внутри скобок 3 - это просто число 3. (Чтобы обратиться к колонке внутри скобок, нужно писать $3.)

И ещё, какую роль играет rgbcolor в lc rgbcolor variable и можно ли писать проще lc rgb variable?

После linecolor должно стоять определение цвета, одно из многих возможных. В частности, lc variable требует целого числа, индекса в палитре фиксированных цветов, а lc rgbcolor variable требует целого числа, которое gnuplot поделит на байты, соответствующие красному, зелёному и синему каналам.

Насчёт rgb vs. rgbcolor, я только помню, что некоторые ключевые слова в gnuplot можно сокращать. Навскидку, в help rgbcolor не написано, что можно писать именно rgb, но если оно так работает, пусть будет.

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

Спасибо за разъяснения!

С опциями using 1:2:3 lc rgb(color) var(iable)

работает как швейцарские часы, притом, что цвета заданы в формате 0x??????

О лучшем и мечтать не приходится!

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