2012-05-25 6 views
1

Я пытаюсь построить матрицу в Gnuplot, как я бы использовал imshow в Matplotlib. Это означает, что я просто хочу построить фактические значения матрицы, а не интерполяцию между значениями. Я был в состоянии сделать это, пытаясьпостроения матриц с gnuplot

splot "file.dat" u 1:2:3 ps 5 pt 5 palette 

Таким образом, мы говорим о программе использовать столбцы 1,2 и 3 в файле, использовать квадраты размером 5 и пространстве точек с очень узкими зазорами. Однако точки в моем наборе данных не равномерно распределены, и, следовательно, я получаю разрывы.

Любой метод построения значений матрицы в gnuplot независимо от того, что они не равномерно распределены по осям Xa и y?

+0

Ваша проблема в том, что вы не можете получить gnuplot для построения матрицы с неравномерными интервалами или что неравномерное расстояние между точками создает пробелы? – andyras

+0

Моя проблема в том, что в сюжете появляются пробелы. Поэтому мне понадобится процедура построения матрицы без пробелов или интерполяций. – ricoamor

ответ

0

См. Объяснение для входных данных here. Возможно, вам придется соответствующим образом изменить формат файла данных.

+0

Спасибо, но опять же это не вопрос о том, как отформатировать данные. Речь идет о разнице между построением матрицы MxN с использованием (M-1) x (N-1) кадров или просто построением полной матрицы. Это то, что импровизировал бы в matplotlib. – ricoamor

1

Gnuplot не нуждается в равномерном пространстве осей X и Y. (см. еще один из моих ответов: https://stackoverflow.com/a/10690041/748858). Я часто занимаюсь сетками, которые выглядят как x[i] = f_x(i) и y[j] = f_y(j). Это довольно тривиальный сюжет, файл данные выглядит как:

#datafile.dat 
x1 y1 z11 
x1 y2 z12 
... 
x1 yN z1N 
      #<--- blank line (leave these comments out of your datafile ;) 
x2 y1 z21 
x2 y2 z22 
... 
x2 yN z2N 
      #<--- blank line 
... 
... 
      #<--- blank line 
xN y1 zN1 
... 
xN yN zNN 

(обратите внимание на пустые строки)

файл данные, как, которые могут быть построены как:

set view map 
splot "datafile.dat" u 1:2:3 w pm3d 

Опция set pm3d corners2color может для тонкой настройки, в каком углу вы хотите покрасить созданный прямоугольник.

Также обратите внимание, что вы могли бы сделать по существу тот же сюжет делает это:

set view map 
plot "datafile.dat" u 1:2:3 w image 

Хотя я не использовать это сам, так что, возможно, не с не одинаково разнесенной прямоугольной сеткой (вы нужно попробовать).

Ответ на ваш комментарий

Да, pm3d ли генерировать (M-1) х (N-1) четырехугольник, как вы упоминались в вашем комментарии - Он принимает 4 угла и (по по умолчанию) усредняет их значение для назначения цвета. Вы, кажется, не любите этого, хотя (в большинстве случаев) я сомневаюсь, что вы сможете отличить сюжет за достаточно большие M и N (больше 20). Итак, прежде чем мы продолжим, вы можете спросить себя, действительно ли необходимо построить график КАЖДОЙ ТОЧК.

Это, с небольшим количеством работы, gnuplot все еще может делать то, что вы хотите. Решение состоит в том, чтобы указать, что конкретный угол должен использоваться для назначения цвета всему четырехугольник.

#specify that the first corner should be used for coloring the quadrilateral 
set pm3d corners2color c1 #could also be c2,c3, or c4. 

Тогда просто добавить последнюю строку и последний столбец вашей матрицы, чтобы построить его в два раза (что составляет дополнительную Gridpoint для размещения большего набора данных. Вы не совсем там еще, вы должны изменить свою сетку значения на половину ячейки, чтобы ваши четырехугольники были центрированы в рассматриваемой точке - каким образом вы меняете ячейки, зависит от вашего выбора угла (c1, c2, c3, c4). Вам нужно будет поиграть с ним чтобы выяснить, какой из них вы хотите.

Обратите внимание, что проблема здесь не в gnuplot.Дело в том, что в файле данных недостаточно информации для построения поверхности MxN, заданной в MxN тройках. В каждой точке вам нужно знать, что это позиция (x, y) - это значение (z), а также размер четырехстороннего рисования - это больше информации, чем вы упаковали в файл. Конечно, вы можете угадать размер во внутренних точках (просто встретитесь на полпути), но на внешних точках нет никаких догадок. , но почему бы просто не использовать размер следующей внутренней точки?. Это хороший вопрос, и он (как правило) хорошо работает для прямоугольных сеток, но это только частный случай (хотя и общий), который (вероятно) потерпит неудачу для многих других сеток. Дело в том, что gnuplot решил, что усреднение углов обычно «достаточно близко», но затем дает вам возможность изменить его.

+0

Спасибо, но это не отвечает на проблему интерполяции. У меня уже есть данные в правильном формате. Проблема в том, что с помощью процедуры, описанной для матрицы MxN, мы бы восстановили график с (M-1) x (N-1) кадрами, с цветами, соответствующими интерполяции между значениями матрицы. Это не то, что я хочу. Я просто хотел бы использовать эквивалентную процедуру для построения точек MxN. – ricoamor

+0

@ricoamor - график с изображением (последний) графиков MxN точек. – mgilson

+0

@ricoamor - я отредактировал с pm3d решением, которое, я уверен, сработает ... но это требует немного больших усилий с вашей стороны. Я попытался объяснить, почему это так. Надеюсь, это было достаточно ясно. – mgilson

Смежные вопросы