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.dat, сигурен съм, че ще изброи точките ви в колони, но не разделени с ;. По този начин, когато се опитате да начертаете както 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).
    • помислете дали да не използвате 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