Экспорт графика в виде изображения в Mathematica на машине без X11 (т.е. без использования внешнего интерфейса) - PullRequest
10 голосов
/ 25 ноября 2008

Рассмотрим следующий диалог с интерфейсом командной строки для ядра:

$ math
Mathematica 6.0 for Linux x86 (32-bit)

In[1]:= p = Plot[x^2, {x,-1,1}]
Out[1]= -Graphics-

In[2]:= Export["foo.png", p]
Out[2]= foo.png

Это прекрасно работает на машине с $Version = 6.0 for Linux x86 (32-bit) (June 2, 2008), но не работает на машине с $Version = 7.0 for Linux x86 (64-bit) (November 11, 2008) со следующей ошибкой:

Export::nofe: A front end is not available; export of PNG 
requires a front end.

С подобными ошибками для любого другого формата изображения, который я могу придумать.

Итак, вопрос в том, как мне заставить ядро ​​Mathematica без интерфейса экспортировать изображения? Почему это работает без проблем в Mathematica 6.0? Если приведенный выше пример работает для вас в версии 7, пожалуйста, дайте мне знать!

PS: в версии 7 была введена функция UsingFrontEnd, но она не работает с

Developer`UseFrontEnd::nofestart: 
Unable to launch a front end. Proceeding without a front end.

предположительно, потому что X11 не установлен на машине.

Добавление

Оказывается, что нет разницы между версией 6 и версией 7 в этом отношении. Скорее, на машине с версией 6 передний конец вызывался тихо. Проблема с другим компьютером, как ясно показывают ответы на этот вопрос, заключается в том, что X-сервера не было, и поэтому внешний интерфейс не может быть вызван.

Ответы [ 2 ]

7 голосов
/ 09 ноября 2009

Вам нужен интерфейс для экспорта графики из MathKernel. Визуализация графики полностью покрыта внешним интерфейсом. Без внешнего интерфейса у вас нет графики для экспорта. Обходного пути нет.

Что вы можете сделать, если у вас есть рабочий интерфейс, это использовать:

UseFrontEnd[Export[filename,graphics]]

Это вызовет интерфейс из терминала, что позволит вам экспортировать графику.

Чтобы иметь работающий интерфейс на машине Linux без установленного X-сервера и диспетчера Windows, у вас есть следующие опции:

  1. Использовать X display с другого аппарата. Смотрите, например http://www.hungry.com/~jamie/xexport.html. В основном это сводится к установке переменной среды export DISPLAY=machine_address:0.0 или передаче во время каждого варианта выполнения -display machine_address:0.0.

  2. Установить локально Xvfb, который является фрейм-буфером X-сервера. Это довольно просто и просто в использовании. Смотрите, например Запись в Википедии на Xvfb. Вы можете установить X display при запуске Xvfb Xvfb :display_nr &, а затем использовать его как в предыдущем варианте.

3 голосов
/ 25 ноября 2008

Для экспорта графики требуется также интерфейс в версии 6. В свою очередь, для внешнего интерфейса может потребоваться X (ведь даже некоторые 2D-графики требуют ускорения 3D-графики ...)

У меня есть только v6 для Windows. Там внешний интерфейс автоматически запускается в фоновом режиме по мере необходимости при экспорте графики из сеанса командной строки.

...