gnuplot: метка X и y-оси матрицы (тепловая карта) с именами строк и столбцов

Я абсолютно новичок в gnuplot и не нашел рабочего решения после googling.

у меня есть матрица данных, выглядящая примерно так:

  A B C D E
A 0 2 3 4 5
B 6 0 8 9 0
C 1 2 0 4 5
D 6 7 8 0 0
E 1 2 3 4 0

то, что я хотел бы сделать, это построить тепловую карту с plot 'result.csv' matrix with image, с осью x, помеченной A-E, и осью y, помеченной A-E. эта матрица не всегда имеет одинаковый размер, но число строк всегда равно числу cols, и она всегда помечена.

может кто-нибудь помочь мне с этим? Я думаю, я должен использовать using команда, но до сих пор это кажется мне полным вуду...

Спасибо большое!

2 ответов


это на самом деле Дузи, и я не могу сделать это без какой-то магии *nix shell.

во-первых, мы хотим получить метки x tic и метки y tic:

XTICS="`awk 'BEGIN{getline}{printf "%s ",}' test.dat`"
YTICS="`head -1 test.dat`"

на данный момент XTICS-это строка "F G H I J", А YTICS-строка "A B C D E".

теперь мы хотим установить xtics итерацией:

set for [i=1:words(XTICS)] xtics ( word(XTICS,i) i-1 )
set for [i=1:words(YTICS)] ytics ( word(YTICS,i) i-1 )

мы использовали 2 функции gnuplot builtin (word и words). words(string) подсчитывает, сколько слов есть в данном строка (слово-последовательность символов, разделенных пробелами). word(string,n) возвращает n-е слово в строке.

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

plot "<awk '{=\"\"}1' test.dat | sed '1 d'" matrix w image
#######^ replace the first field with nothing
################################## ^ delete first line

и теперь ваш сюжет (надеюсь) выглядит так, как вы хотите.

также обратите внимание, что, поскольку мы использовали итерацию, этот скрипт будет работать только в gnuplot 4.3 или выше-поскольку текущая стабильная 4.6, надеюсь, это нормально.


хорошо, этот вопрос старый, но в gnuplot уже реализован гораздо более простой способ:

plot 'result.csv' matrix rowheaders columnheaders with image

получил его от http://gnuplot.sourceforge.net/demo/heatmaps.html