Ошибки с gnuplot после выполнения

#c #gnuplot

#c #gnuplot

Вопрос:

Я давно хотел вывести некоторые данные с помощью gnuplot. То, что я написал, отлично компилируется и также выполняется. Сам сюжет, похоже, даже работает в gnuplot.

Тем не менее, я получаю предупреждение, которое я хочу понять:

Предупреждение: медленная инициализация шрифта qt_processtermevent получила событие GE_fontprops. Этого не должно было произойти

Что означает эта ошибка и как я могу ее избежать? Это вообще как-то влияет на график?

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

 #include <stdio.h>

int main(int argc, char const *argv[]) {
  float currentPop;
  float nextPop = 0;
  float growthRate;
  FILE *fp = NULL;
  FILE *gnupipe = NULL;
  char *GnuCommands [] = {"set title "Popsim"", "plot 'data.tmp'"};

  fp = fopen("data.tmp", "w");
  gnupipe = _popen("gnuplot -persistent", "w");

  printf("Enter current population and growth rate:n");
  scanf("%f %f", amp;currentPop, amp;growthRate);

  for (int counter = 0; counter < 30; counter  ) {
    nextPop = growthRate * currentPop * (1 - currentPop);
    fprintf(fp, "%d %fn", counter, nextPop);
    currentPop = nextPop;
  }

  for (int i = 0; i < 2; i  ) {
    fprintf(gnupipe, "%sn", GnuCommands[i]);
  }

  return 0;
}
 

Кроме того, дополнительный вопрос: как мне заставить gnuplot провести линию между точками, которые он отображает, чтобы мне было легче визуализировать?

Комментарии:

1. Вы проверили руководство и стили построения, например plot 'data.tmp' with lines , или plot 'data.tmp' with linespoints ?

2. @theozh У меня нет, я загрузил gnuplot 15 минут назад и никогда раньше им не пользовался. Я понял, что, вероятно, смогу найти учебник на Youtube о том, как строить линии. Тем не менее, все еще интересно узнать об этом предупреждении.

3. Это предупреждение, а не ошибка. Но, извините, я не знаю, что это значит. Попробуйте перейти на wxt terminal set term wxt . Возможно, вы найдете еще несколько объяснений (в будущем) здесь: sourceforge.net/p/gnuplot/bugs/2316

4. Не связано: fclose(fp); перед отправкой команд по каналу (или даже перед открытием канала).

Ответ №1:

Gnuplot не выполняет собственную обработку шрифтов. В зависимости от того, какой режим вывода (gnuplot называет его «терминальным») используется, он запрашивает различные системные библиотеки или подсистемы, чтобы оценить, сколько места будет занято определенной строкой символов, которые будут размещены на графике. Если ответ на запрос является ошибкой или слишком медленным, он выводит это предупреждение и продолжает с наилучшей оценкой требуемого пространства.

Насколько я понимаю, наиболее распространенной основной причиной этого является то, что запрашиваемый шрифт в настоящее время отсутствует в системном кэше шрифтов, поэтому ответ на первый запрос очень медленный. После этого шрифт находится в кэше, поэтому ответ приходит быстро, и вы больше не видите сообщение, по крайней мере, не из того же сеанса gnuplot.

Существует параметр командной строки, который указывает программе дольше ждать ответа системы:

  gnuplot --slow
 

Это, вероятно, позволит избежать предупреждающего сообщения и, возможно, улучшить расположение текста на первом графике, но это может привести к заметной задержке при создании этого первого графика во время обновления системного кэша шрифтов.