Вопрос по matrix – gnuplot: метка x и ось y матрицы (тепловой карты) с именами строк и столбцов

7

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

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

  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. Эта матрица не всегда имеет один и тот же размер, но число строк всегда равно количеству столбцов и всегда помечено.

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

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

Ваш Ответ

2   ответа
11

Это на самом деле дузи, и я не могу сделать это без некоторой магии оболочки * nix.

Сначала мы хотим получить метки x tic и y tic:

XTICS="`awk 'BEGIN{getline}{printf "%s ",$1}' 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 (word а такжеwords). words(string) подсчитывает, сколько слов содержится в данной строке (слово представляет собой последовательность символов, разделенных пробелами).word(string,n) возвращает n-ое слово в строке.

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

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

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

Also note that since we have used iteration, this script will only work in gnuplot 4.3 or higher -- Since the current stable is 4.6, hopefully that's Ok.

Вы, сэр, мой герой дня. Большое спасибо! Eekhoorn
XTICS без awk: XTICS = & quot;cut -d' ' -f1 test.dat |xargs & Quot; ; Использование xargs для преобразования столбцов в строку.
@zenbomb - Нет проблем. Для меня это была довольно забавная игра, чтобы попытаться понять это. Я не работаю сmatrix файлы данных часто, так что для меня это был хороший шанс узнать что-то новое о gnuplot.
3

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

plot 'result.csv' matrix rowheaders columnheaders with image

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

Дополнение: вариантыrowheaders а такжеcolumnheaders доступны с версии 5.0 патч уровня 0.

Похожие вопросы