Gnuplot с поверхностным графиком и точками

Я попытался сделать это так, как предлагалось в других сообщениях. Но точки не были напечатаны. В чем моя ошибка:

set decimalsign locale
set datafile separator ";"

set table 'point_data.dat'
    unset dgrid3d
    splot './points.csv' u 1:2:3
unset table

#set pm3d implicit at s
#set pm3d interpolate 1,1 flush begin noftriangles hidden3d 100 corners2color mean
set dgrid3d 50,50,50

set output 'field.pdf'

splot './point_data.dat' u 1:2:3 w points pt 7, \
      './field.csv' u 2:1:3 with lines lt 5 lc rgb "#000000"

set output
exit

Спасибо за помощь


person user2621666    schedule 26.07.2013    source источник


Ответы (1)


Я предполагаю, что ваша проблема - datafile separator.
Если вы посмотрите point_data.datfile, я уверен, что он перечислит ваши баллы в столбцах, но не разделенных ;. Таким образом, когда вы пытаетесь построить и point_data.dat, и field.csv (который, как я полагаю, также разделен ;), точки, скорее всего, не будут нанесены, потому что gnuplot не может интерпретировать point_data.dat-файл (который использует разделитель по умолчанию " ") .
Есть два способа решить эту проблему:

  1. Не используйте set datafile separator. Вместо этого используйте awk, чтобы удалить ; при построении:

    set decimalsign locale
    set table 'point_data.dat'
    unset dgrid3d
    
    splot "< awk 'BEGIN {FS=\";\"} {print $1, $2, $3}' points.csv" u 1:2:3
    
    unset table
    set dgrid3d 50,50,50
    
    splot "point_data.dat" u 1:2:3 w points pt 7, \
          "< awk 'BEGIN {FS=\";\"} {print $1, $2, $3}' field.csv" u 2:1:3 with lines lt 5 lc rgb "#000000"
    

    Обратите внимание на несколько моментов:

    • inside the awk-command, do not forgot to use backslashes with the quotation marks: \" or else it will mess up the command (and result in an error).
    • рассмотрите возможность использования unsing not для подавления записи легенды или использования определенного заголовка (например, title "points"), иначе вся awk-команда будет напечатана как заголовок.
  2. Вы можете использовать multiplot-команду (и пропустить set table):

    set datafile separator ";"
    
    set xrange [xmin:xmax]
    set yrange [ymin:ymax]
    set zrange [zmin:zmax]
    
    set multiplot
    splot "points.csv" u 1:2:3 w points pt 7 not
    set dgrid3d 50,50,50
    splot "field.csv" u 2:1:3 with lines lt 5 lc rgb "#000000" not
    unset dgrid3d
    unset multiplot
    

    Обратите внимание на несколько моментов:

    • use not to print without legend, or else they will overlap. If you need a legend, you cannot use multiplot like this, because they will overlap.
    • установите xrange, yrange и zrange перед тем, как строить график, иначе диапазоны осей могут не совпадать. (Обязательно замените xminetc фактическими значениями из вашего диапазона данных).
person Schorsch    schedule 27.07.2013
comment
Я думаю, что первый вариант является лучшим, потому что использование multiplot для этого требует также, чтобы вы отключили многие вещи перед вторым plot (граница, тики, метки). В противном случае в некоторых терминалах сюжет может выглядеть некрасиво, потому что отрисовка объектов дважды приводит к другому сглаживанию. И если вы удалите метки и тики, вам нужно исправить поля, например, set lmargin at screen 0.2. - person Christoph; 14.08.2013