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