3d-сетка, адаптированная к непрямоугольным данным в gnuplot

StackOverflow https://stackoverflow.com//questions/10687502

  •  12-12-2019
  •  | 
  •  

Вопрос

Я хотел бы нанести точки на трехмерный график и создать сетку, которая могла бы обрабатывать непрямоугольные данные.Чтобы быть более конкретным, мои данные таковы

данные.dat

-1 0 0
-1 1 0
0 -1 0
0 0 0
0 1 0
1 -1 0
1 0 0

и мой файл gnuplot

сюжет.plt

set dgrid3d 3,3
splot 'data.dat' w l
pause -1

К несчастью dgrid3d кажется, мои данные становятся прямоугольными, и строится прямоугольная сетка (на самом деле квадратная сетка).Есть ли способ отобразить ограниченный объем моих данных?В идеале я хотел бы построить график ортогональная выпуклая оболочка из моего набора точек зрения.

Это было полезно?

Решение

У вас есть несколько вариантов сделать что-то подобное - к сожалению, все они требуют некоторой работы с вашей стороны.

Во-первых, важно отметить, что gnuplot может обрабатывать непрямоугольные сетки для построения поверхностей (даже несмотря на то, что для этого примера вам нужна только прямоугольная поверхность).Для построения поверхности файл данных выглядит следующим образом (обратите внимание на пустые записи):

x11 y11 z11
x21 y21 z21
x31 y31 z31
...

x12 y12 z12
x22 y22 z22
x23 y23 z23
...

Затем он образует четырехугольники.В этом случае первый четырехугольник был бы сформирован из точек (x11,y11),(x21,y211),(x12,y12),(x22,y22).Второй четырехугольник был бы образован из (x21,y21), (x31,y31), (x22,y22), (x23,y23) и так далее.Итак, учитывая ваш набор точек, вы можете легко создать "прямоугольную сетку", которая будет содержать все ваши точки данных.Они будут расположены неравномерно, но в целом это не проблема.Теперь нам нужно выяснить, как удалить точки, чтобы gnuplot не отображал их на графике.В этом и есть "фишка".Вы можете пометить определенную строку как "отсутствующие данные" в файле данных (set datafile missing "string").В этом случае gnuplot не будет отображать эту точку, но он все равно будет отслеживать координаты недостающих данных для создания поверхности.

Таким образом, в конце концов, ваш файл данных будет выглядеть примерно так:

x11 y11 ?
x21 y21 ?
x31 y31 z31
...

x12 y12 ?
x22 y22 z22
x23 y23 z23
...

и сценарий для его создания был бы таким:

set datafile missing '?'
set surf
set view map #Not sure about this...depends on the view you want
splot "mydata.dat" u 1:2:3 w lines

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

САМЫЙ ПРОСТОЙ СПОСОБ

Также обратите внимание, что если вам нужен сплошной цветной объект в двумерном пространстве (как на картинке по ссылке в Википедии, которую вы разместили), эта проблема значительно упрощается.Если вы можете создать файл данных только с вершинами объекта, который вы хотите нарисовать (в таком порядке, чтобы (x1,y1) соединялось с (x2, y2) соединялось с (x3,y3)...), тогда вы можете построить этот файл данных следующим образом:

set fillstyle #However you want the object to appear
plot "datafile.dat" u 1:2 with filledcurves closed
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top