Тепловая карта с Gnuplot на неоднородной сетке

Я хотел бы создать тепловую карту с помощью gnuplot на основе неоднородной сетки, что означает, что мои ячейки оси x не имеют одинаковой ширины, и я не могу понять, как это сделать, потому что, когда я рисую свои данные с помощью для Пример «с изображением» Я получаю блоки одинакового размера, которые вообще не соответствуют моим координатам (потому что «изображение» обрабатывает данные точно так же, как матрицу, я полагаю). Итак, я хотел бы найти метод получения неоднородных блоков, которые также располагаются в нужном месте на декартовой плоскости.

Мои данные выглядят примерно так:

1 1 0.2
1 2 0.8
1 3 0.1
1 4 0.2

2 1 0.7
2 2 0.2
2 3 0.3
2 4 0.1

5 1 0.2
5 2 0.4
5 3 0.1
5 4 0.9

7 1 0.3
7 2 0.2
7 3 0.9
7 4 0.6

Если я запустил эту команду в Gnuplot

set xrange [1:10]
p 'mydata.dat' with image

Я получаю изображение с 16 полями, которые имеют одинаковую ширину и высоту (очевидно, у меня недостаточно «репутации» в Stackoverflow для публикации изображения, иначе я бы сделал это), но в идеале я бы хотел, чтобы поля имели разную ширину и были в нужном месте в самолете. Например, первое поле должно располагаться от 1 до 2, второе - от 2 до 5, третье - от 5 до 7 и последнее - от 7 до 10 (поэтому я написал set xrange [1:10]).

Может ли кто-нибудь мне помочь? Большое тебе спасибо!


person user1962851    schedule 10.10.2013    source источник
comment
Вы должны опубликовать свой код, иначе он будет закрыт как не по теме. Вопросы, требующие кода, должны демонстрировать минимальное понимание решаемой проблемы. Включите попытки решения, почему они не сработали, и ожидаемые результаты.   -  person zero323    schedule 10.10.2013


Ответы (1)


Самый простой (возможно, единственный жизнеспособный) способ - добавить несколько фиктивных точек данных и использовать splot ... with pm3d. Этот стиль построения обрабатывает тепловые карты с обычными четырехугольниками.

Стиль построения image отображает один прямоугольник (один большой пиксель) для каждой точки данных, в то время как pm3d принимает каждую точку данных как угол одного или нескольких четырехугольников. Цвет каждого четырехугольника определяется значениями углов и регулируется с помощью set pm3d corners2color.

Итак, в вашем случае вам нужно расширить матрицу 4x4 до матрицы 5x5 (развернуть вправо и вверх), но выберите нижний левый угол, чтобы определить цвет set pm3d corners2color c1.

Таким образом, измененный файл данных:

1 1 0.2
1 2 0.8
1 3 0.1
1 4 0.2
1 5 0.5

2 1 0.7
2 2 0.2
2 3 0.3
2 4 0.1
2 5 0.5

5 1 0.2
5 2 0.4
5 3 0.1
5 4 0.9
5 5 0.5

7 1 0.3
7 2 0.2
7 3 0.9
7 4 0.6
7 5 0.5

10 1 0.5
10 2 0.5
10 3 0.5
10 4 0.5
10 5 0.5

Чтобы построить это, используйте

set pm3d map corners2color c1
set autoscale fix
set ytics 1
splot 'mydata.dat' using 1:($2-0.5):3 notitle

Результат с 4.6.3:

введите описание изображения здесь

В общем, z-значение фиктивных точек данных не имеет значения, но в приведенном выше сценарии оно должно лежать где-то между минимальным и максимальным значениями, чтобы позволить set autoscale fix правильно работать на цветовой шкале.

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

person Christoph    schedule 10.10.2013
comment
Большое спасибо, Кристоф, это именно то, что я искал! - person user1962851; 10.10.2013