Gnuplot сохраняет много изображений

0

Я хочу написать результат операции gnuplot в png файле, и это сработает, но мне нужно сгенерировать около 100 png файлов, и здесь я столкнулся с проблемой, так как получаю сообщение об ошибке "Максимальное количество временных файлов gnuplot равно 27". Когда я использую метод remove_tmpfiles(), все изображения генерируются должным образом, но около 20-30 из них не могут быть открыты. Эта ошибка не появляется, когда я сохраняю только рекомендованные 27 изображений.

Gnuplot::set_GNUPlotPath( GNUPLOT_PATH );
Gnuplot *main_plot = new Gnuplot;    
main_plot->cmd("set terminal pngcairo\n");
for(int j=0; j<100;j++)
{   
 rysuj_wagi(j, main_plot);  
 if(j%25 == 0) main_plot->remove_tmpfiles(); 
} 


    void rysuj_wagi(int numer, Gnuplot * main_plot)
{
  std::ostringstream oss;
  oss <<"set output 'waga" << numer<<".png'";
  string output = oss.str();
  cout<<output;
  main_plot->cmd(output); 
  main_plot->set_grid(); 
  main_plot->set_xrange(-5,5);
  main_plot->set_yrange(-5,5);
  main_plot->set_style( "linespoints" );
  main_plot->set_pointsize( 1.0 );  
  vector<double> x, y;
  x.push_back(0); 
  y.push_back(0);
  x.push_back(punktyWagX[numer]);
  y.push_back(punktyWagY[numer]);
  main_plot->reset_plot();
  main_plot->plot_xy(x, y); 
}   

Вы случайно знаете выход?

  • 1
    Какие файлы не могут быть открыты? Попробуйте добавить main_plot->cmd("set output"); в конце вашей функции rysuj_wagi . Gnuplot завершает выходной файл только тогда, когда обнаружен новый set output 'filename' . Может быть, это мешает remove_tmpfiles() . Чтобы избежать этого, может помочь отправка set output (да, без имени файла).
  • 1
    Он всегда не создавал около 10 последних изображений для каждых 25. Ваше решение работает, но случаи, когда я удаляю temp_files (), чтобы примерно 4 на 100 не открывались. Я думал, что он удаляет файл temp_file слишком быстро, поэтому я заставил его некоторое время спать (int j = 0; j <100; j ++) {rysuj_wagi (j, main_plot); if (j == 25 || j == 50 || j == 75) {Sleep (1000); main_plot-> remove_tmpfiles (); }} и это тоже работает. Спасибо за усилия.
Теги:
gnuplot
png

1 ответ

0

Похоже, вы используете этот API: http://jfi.uchicago.edu/~tcaswell/track_doc/classgnuplot_1_1Gnuplot.html

Вы пробовали что-то вроде этого:

main_plot->cmd("set terminal pngcairo\n");         
//some setting of YOUR_FILENAME
main_plot->cmd("set output 'YOUR_FILENAME'\n");
main_plot->cmd("replot\n");

Вы могли бы надеяться, что все файлы temp будут сохранены вместе.

  • 0
    Это все еще не работает, поднимая ту же ошибку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню