Поделиться изображением от mpldatacursor с другими

Я использую пример в том, как показывать метки данных, когда вы наводите указатель мыши на данные, чтобы сделать изображение, где появляются данные при наведении указателя мыши на точки. Это работает очень хорошо, но есть ли способ сохранить его, чтобы я мог отправить изображение другим? Я не уверен, какие форматы поддерживают «всплывающие подсказки», но pdf и svg оба делают, а может быть, есть и другой способ?

Если мне нужно упаковать исполняемый файл, что это самый простой способ сделать это в Linux?

One Solution collect form web for “Поделиться изображением от mpldatacursor с другими”

Могут быть способы заставить вещи работать с svg и немного javascript или pdf всплывающих подсказок, как вы предложили (я не знал, что pdf-подсказки существовали до тех пор, пока вы их не упомянули!).

В стороне, я должен взять минутку, чтобы упомянуть mpld3 который воссоздает фигуры matplotlib как визуализацию javascript, используя d3 . Это позволяет очень обмениваемые интерактивные фигуры и имеет некоторые примеры создания интерактивных всплывающих подсказок.

Тем не менее, я не уверен, как сделать файлы svg matplotlib в целом интерактивными, и вы упомянули, что лучше не идти по маршруту javascript, поэтому я проведу вас через создание автономного исполняемого файла (или, скорее, , каталог с исполняемыми и связанными с ним библиотеками).

Создание «автономного» исполняемого файла с помощью cx_freeze и matplotlib

По крайней мере, что касается упаковки исполняемого файла, я бы рекомендовал cx_freeze . Существует множество других опций (например, pyinstaller , py2exe , py2app и т. Д.), Но большинство из них являются специфичными для платформы и немного «волшебными» для моих вкусов. cx_freeze требует немного больше знаний для использования, но он достаточно надежный и не слишком сложный в использовании, как только вы осознаете, что нужно включить.

Во-первых, полный пример, который я собираюсь провести, доступен здесь: https://gist.github.com/joferkington/9214844 Он использует пример сценария и данные, которые вы дали как часть более раннего вопроса.

Ключ состоит в том, чтобы создать файл setup.py который правильно ссылается на 1) файлы данных matplotlib и 2) любые данные, которые необходимо включить с кодом для его правильной работы.

После этого это так же просто, как python setup.py build_exe и tar python setup.py build_exe каталог, который он создает для отправки другим людям. (Возможно, вам, скорее всего, захочется сделать что-то еще более интересное. Можно сделать сценарии оболочки, содержащие tarred данные, библиотеки и исполняемые файлы, но я пропущу эту часть здесь.)

Создание файла setup.py

setup.py с помощью setup.py . Предположим, у вас есть простой скрипт, называемый plot.py который содержит некоторый базовый код построения и файл с именем data.csv с данными, которые вы хотите построить с помощью matplotlib и т. Д. Файл setup.py для cx_freeze будет выглядеть примерно так: (Кроме того, для простоты я предполагаю, что вы используете бэкэнд Tk для matplotlib. Все будет немного отличаться, если вы этого не сделаете.)

 import cx_Freeze import sys import matplotlib base = None if sys.platform == "win32": base = "Win32GUI" executables = [ cx_Freeze.Executable("plot.py", base = base), ] build_exe_options = {"includes":["matplotlib.backends.backend_tkagg"], "include_files":[(matplotlib.get_data_path(), "mpl-data"), ('data.csv', 'data.csv')], "excludes":[], } cx_Freeze.setup( name = "script", options = {"build_exe": build_exe_options}, version = "0.0", description = "A basic example", executables = executables) 

В большинстве случаев это шаблон. Ключевыми частями являются:

  1. Имя вашего скрипта ( x_Freeze.Executable("plot.py", base = base) )
  2. Раздел "includes" в build_exe_options . cx_freeze попытается автоматически угадать, какие модули необходимо включить, но бывают случаи, когда невозможно обнаружить все, что ему нужно. В этом разделе вы можете указать дополнительные модули для явного включения. Батлы matplotlib обычно не распознаются автоматически, поэтому вам нужно явно указать, какой бэкэнд вы используете.
  3. Раздел "include_files" в build_exe_options . Это указывает на любые дополнительные файлы данных, которые необходимо включить. Matplotlib имеет некоторые файлы данных (значки и т. Д.), Которые необходимо отправлять вместе с кодом и библиотеками для правильной работы. Строка (matplotlib.get_data_path(), "mpl-data") получает эти файлы и помещает их в папку с именем mpl-data внутри каталога сборки. Аналогично, строка ('data.csv', 'data.csv') получает ваш файл data.csv и сохраняет его с тем же именем в каталоге сборки.

Я возьму секунду, чтобы упомянуть опцию "excludes" . Это полностью необязательно, но cx_freeze обычно включает в себя множество библиотек, которые на самом деле не требуются для работы вашего скрипта. Если вы хотите уменьшить размер файла, который вы распространяете, вы можете указать отдельные модули python для исключения здесь. (например, "excludes":['PyQt4', 'scipy'] )

Остальное довольно понятно. Вы можете захотеть заполнить описание, версию и т. Д., Но не обязательно создавать исполняемый файл.

Здание

Итак, на данный момент у нас есть каталог с содержимым, похожим на следующее:

 $ ls data.csv plot.py setup.py 

data.csv имеет наши данные, plot.py – это сценарий для его построения, а setup.py – как описано выше.

Чтобы создать исполняемый файл, мы будем запускать

 python setup.py build_exe 

Вы получите длинный журнал сборки и то, что он копирует (возможно, вместе с некоторыми предупреждениями, которые в большинстве случаев можно игнорировать). (Это полезная информация для отладки, что не так с вашим файлом setup.py .)

После его завершения вы увидите новый каталог с именем build .

 $ ls build data.csv plot.py setup.py 

На этом этапе build будет содержать единый каталог с именем нечто похожее:

 $ ls build exe.linux-x86_64-2.7 

exe.whatever содержит библиотеки, данные и исполняемый файл, которые вам нужно распространять среди людей для правильной работы.

Чтобы узнать, работает ли это, попробуйте (обратите внимание на эксплимент cd в каталог! Еще об этом немного.):

 $ cd build/exe.linux-x86_64-2.7 $ ./plot 

(Очевидно, что если ваш файл выше не был вызван plot.py , исполняемый файл не будет называться plot , но вы получите идею.)

На этом этапе вы можете настроить exe.whatever каталог (возможно, хотите переименовать его до tarring), отправить его и сообщить людям, чтобы он запускал его путем разборки и вызова cd name_of_dir; ./plot cd name_of_dir; ./plot .

Предостережения о путях к данным

Я упомянул, что в настоящее время нам нужно явно указать cd в каталог перед запуском. Это связано с тем, что plot.py ищет файл с именем data.csv в текущем каталоге .

Другими словами, в plot.py есть строка, которая делает:

 df = pd.read_csv('data.csv', ...) 

Мы сделали setup.py достаточно умным, чтобы включить data.csv но код, который его читает, ожидает, что он будет в текущем каталоге.

У вас есть два варианта:

  1. Всегда cd директорию в директорию перед запуском скрипта (на практике выгружаете короткий скрипт, в который cd s, запускает программу, а cd s обратно). Это полезно в крайнем случае, если вы не хотите беспокоиться о втором варианте.
  2. Измените свой код, чтобы ссылаться на файл данных относительно местоположения скрипта.

Второй вариант лучше по нескольким причинам, но вам придется немного изменить свой сценарий ( plot.py , в данном случае).

Обычно вы должны использовать путь к __file__ для определения местоположения относительно самого скрипта. Однако, cx_freeze , __file__ не будет определен, и путь, который вы хотите, – это sys.executable . По этой причине вы обычно делаете что-то вроде этого: (Из cx_freeze faq: http://cx-freeze.readthedocs.org/en/latest/faq.html#data-files )

 def find_data_file(filename): if getattr(sys, 'frozen', False): # The application is frozen datadir = os.path.dirname(sys.executable) else: # The application is not frozen # Change this bit to match where you store your data files: datadir = os.path.dirname(__file__) return os.path.join(datadir, filename) 

В этом случае вы измените свой код:

 pd.read_csv('data.csv', ...) 

делать:

 pd.read_csv(find_data_file('data.csv'), ...) 

вместо. (Это не было сделано в файле plot.py файле g ist, к plot.py первоначально . Я оставлю его читателю в качестве упражнения.)

Как только мы это сделаем, вы можете напрямую вызвать /path/to/where/the/directory/gets/copied/plot независимо от текущего рабочего каталога.

Распределительная

Я не буду говорить слишком много об этой теме. Есть много способов справиться с этим. С помощью cx_freeze вы отправляете папку, полную библиотек и одного исполняемого файла.

В простейшем случае вы просто where/they/extracted/it/name_of_the_execuctable и попросите людей разобраться и запустить where/they/extracted/it/name_of_the_execuctable . Возможно, вы захотите переименовать папку из exe.linux-x86_64-2.7 в нечто более похожее на my_package и включить скрипт оболочки run_this или что-то в этом роде, но это зависит от вас.

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

Можно вставлять tarred данные, библиотеки и исполняемый файл в «самораспаковывающийся» установочный скрипт. В Интернете есть примеры, если вы хотите копать их. Вы также можете создать .rpm или .deb. Опять же, я пропущу подробный пример и оставлю это вам, чтобы понять.

В целом, для того, что вы, кажется, делаете, отправка tarball и README – это, пожалуй, самый простой маршрут.

  • PIL и векторная графика
  • Анализатор Python SVG
  • Простой графический API с прозрачностью, полигонами, считыванием пикселей изображения?
  • Рисование SVG на холсте Киви
  • Как вставить файл SVG в документ PDF?
  • Перевернутый глиф: растровое изображение> SVG через autotrace> glyph через fontforge
  • Как я могу получить вывод графика matplotlib как SVG?
  • Предложения по манипулированию SVG-картой
  • Данные веб-соскабливания с интерактивной диаграммы
  • Как найти элементы по полю 'id' в файле SVG с помощью Python
  • Изображения SVG не появляются после компиляции пионового кода PyQt4 с py2exe
  • Python - лучший язык программирования в мире.