Неоднородная матрица Gnuplot с метками и изображением дает разные графики - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь построить неоднородную матрицу для следующих данных:

,1,2,4,5,7
6, 5, 4, 3, 1, 0
8, 2, 2, 0, 0, 1
3, 0, 0, 0, 1, 0
9, 0, 0, 0, 2, 3
1, 0, 1, 2, 4, 3

При попытке с этикетками

set datafile separator ","
plot 'num2.dat' nonuniform matrix using  with labels

Я получаю метки во всех желаемых координатах x и y в соответствии с моими данными, как на картинке "matrix-nonuniform-label.jpg

Когда я пытаюсь создать тепловую карту со следующим кодом:

set datafile separator ","
set palette defined (1 "red",2 "blue",3 "green",4 "black",5 "violet")
plot 'num2.dat' nonuniform matrix with image

координаты x и y не разбросаны, как на графике меток. Например, координата (7,9) должна иметь значение 3. Она вообще не отображается. Может кто-нибудь, пожалуйста, помогите указать, чего здесь не хватает. matrix-nonuniform-image.jpg

Заранее спасибо. ув.

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Если честно, меня регулярно озадачивают тепловые карты, и я думаю, я до сих пор не до конца их понял.

Вы заметили, что ваша матрица 6x6, а тепловая карта 5x5? По-видимому, gnuplot принимает точки данных как точки границ и создает сетку с точками 6x6, но, следовательно, только с окрашенными областями 5x5. В некоторых случаях я бы не хотел этого видеть. Пожалуйста, поправьте меня, если я ошибаюсь, но я предполагаю, что вам нужна цветная область для каждой точки данных в вашей матрице.

Вы можете добиться этого с помощью стиля построения with boxxyerrorbar. Посмотрите минимальный пример ниже, и этот { ссылка } также может оказаться полезным.

Код:

### heatmap with boxxyerrorbar
reset session

$Data <<EOD
 , 1, 2, 4, 5, 7
6, 5, 4, 3, 1, 0
8, 2, 2, 0, 0, 1
3, 0, 0, 0, 1, 0
9, 0, 0, 0, 2, 3
1, 0, 1, 2, 4, 3
EOD

set datafile separator comma
Rows = 6.  # float number to avoid gnuplot's integer division
Cols = 6.
set size ratio Rows/Cols   # same ratio as your matrix to get squares for each datapoint

set palette defined (1 "red", 2 "blue", 3 "green", 4 "black", 5 "violet")
set style fill solid 1.0
set yrange[:] reverse

plot $Data u 1:2:(0.5):(0.5):3 matrix with boxxyerror lc palette notitle
### end of code

Результат:

enter image description here

0 голосов
/ 05 мая 2020

Непонятно, как должен выглядеть сюжет изображения. Что вообще значит иметь изображение, в котором только некоторые пиксели имеют значение? Если идея состоит в том, что вам нужен график, похожий на тот, который вы показываете с метками, за исключением того, что вместо символа «1» в позиции [x, y] у вас есть цветной квадрат, попробуйте следующее:

set datafile separator ","
set xrange [0:10]; set yrange [0:10]
plot 'num2.dat' nonuniform matrix using 1:2:3 with points pt 5 lc palette
enter image description here

Вы можете настроить размер квадратов, добавив линию

  set pointsize 3.   # multiplier for point size
...