2017-07-21 3 views
0

J'ai un script python que j'écris un fichier .gnu et il trace un fichier .png. J'essaye de rendre le yrange plus dynamique en réglant la gamme à 5% du maximum et du minimum.Comment mettre à l'échelle automatiquement le yrange de gnuplot en python

Qu'est-ce que je fais mal?

Ce code ne fonctionnera pas comme ceci.

#-- write out .gnu file 
    self.output = textwrap.dedent('''\ 
    set terminal png size 800,600 
    set output "{0}" 
    set grid 
    set xlabel "Cycle" 
    set title "{1}" 
    set xtics ({2}) 
    set yrange[GPVAL_Y_MIN:GPVAL_Y_MAX] 
    plot ''').format(self.figurename, self.title, ",".join(plot_data.keys()), self.styletype, self.datafile) 

    for n in range(0,max_num_lines): 
     tmp_str = " ".join(['"{2}"','using','1:'+str(n+2),'title',"'"+self.titles[n+1]+"'",'w linespoints {1}']).format(self.figurename, self.linecombos[n], self.datafile) 
     if n!=max(range(0,max_num_lines)): 
      tmp_str += ", " 
     self.output += tmp_str 

    pass 

Répondre

0

Les variables internes GPVAL_Y_MIN/GPVAL_Y_MAX ne sont pas initialisés jusqu'à ce que vous tracer en fait quelque chose. Pour contourner cela, vous pouvez utiliser la commande stats qui analyse un fichier et fournit les valeurs min/max souhaitée par les variables STATS_min_y/STATS_max_y:

self.output = textwrap.dedent('''\ 
set terminal png size 800,600 
set output "{0}" 
set grid 
set xlabel "Cycle" 
set title "{1}" 
set xtics ({2}) 

#analyze the file and adjust y-range 
stats "{3}" nooutput 
set yrange[STATS_min_y:STATS_max_y] 

plot ''').format(self.figurename, self.title, ",".join(plot_data.keys()), self.styletype, self.datafile)