与他人共享mpldatacursor的图像

与他人共享mpldatacursor的图像,第1张

与他人共享mpldatacursor的图像

就像您建议的那样,可能有一些方法可以使svg和一些javascript或pdf工具提示起作用(直到您提到它们,我才知道pdf工具提示!)。

mpld3
顺便说一句,我应该花一点时间来提一下,它使用来将matplotlib图形重新创建为javascript可视化
d3
。它确实允许
非常 共享的交互式图形,并提供了一些制作交互式工具提示的示例。

但是,我不确定如何使Matplotlib的svg文件具有一般性的交互性,并且您提到您不希望使用javascript路线,因此,我将指导您构建“独立”可执行文件(或者更确切地说,
,一个包含可执行文件和相关库的目录)。

建立一个“独立”的可执行文件
cx_freeze
matplotlib

至少在打包可执行文件方面,我建议

cx_freeze
。有很多其他的选择(例如
pyinstaller
py2exe
py2app
等),但其中大部分是平台特定的,有点太“神奇”了我的口味。
cx_freeze
需要更多的知识才能使用,但是它非常可靠,一旦您知道需要包括哪些内容,就不会太难使用。

首先,可以在这里找到我要向您介绍的完整示例:https :
//gist.github.com/joferkington/9214844
它使用示例脚本和数据作为您先前提出的问题的一部分。

关键是要构建一个

setup.py
正确引用以下文件的文件:1)matplotlib的数据文件,以及2)您需要在代码中包含的所有数据才能使其正确运行。

之后,它就像

python setup.pybuild_exe
创建要发送给其他人的构建目录一样简单。(您可能想做一些更奇特的事情。可以使包含脚本数据,库和可执行文件的Shell脚本成为可能,但在此我将跳过该部分。)

制作
setup.py
文件

与上

setup.py
。假设您有一个名为的简单脚本
plot.py
,其中包含一些基本的绘图代码,以及一个文件,其中包含
data.csv
您要使用绘制的数据
matplotlib
,等等。该
setup.py
文件
cx_freeze
看起来像这样:(此外,为简单起见,我假设您正在使用Matplotlib的Tk后端。如果不是,情况看起来会有些不同。)

import cx_Freezeimport sysimport matplotlibbase = Noneif 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']

其余的不言而喻。您可能需要填写说明,版本等,但是构建可执行文件不是必需的。

建造

因此,在这一点上,我们有一个目录,其内容类似于以下内容:

$ lsdata.csv  plot.py  setup.py

data.csv
拥有我们的数据,
plot.py
是绘制数据的脚本,
setup.py
如上所述。

要生成可执行文件,我们将运行

python setup.py build_exe

您将获得有关构建及其复制内容的详细日志(很可能还有一些在大多数情况下可以安全忽略的警告)。(这是调试

setup.py
文件问题的有用信息。)

完成后,您会注意到一个名为的新目录

build

$ lsbuild  data.csv  plot.py  setup.py

此时,

build
将包含一个名为类似以下内容的目录:

$ ls buildexe.linux-x86_64-2.7

exe.whatever
目录包含您需要分发给人们以使事情正常运行的库,数据和可执行文件。

要查看它是否有效,请尝试(将显式注释记

cd
入目录中!稍后对此进行更多说明。):

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

(显然,如果没有调用上面的文件,则不会调用

plot.py
该可执行文件
plot
,但您会明白的。)

此时,您可以将

exe.whatever
目录tar (可能要在tar之前重命名),将其发送出去,然后通过解压缩和调用告诉人们运行它
cdname_of_dir; ./plot

关于数据路径的警告

我提到过,我们当前需要

cd
在运行事物之前明确地进入目录。这纯粹是由于 在当前目录
plot.py
查找了一个文件所致。
data.csv
__

换句话说,其中有一行

plot.py

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

我们

setup.py
足够聪明,可以包括在内,
data.csv
但读取它的代码希望它位于当前目录中。

您有两种选择:

  1. cd
    运行脚本之前,请始终将其放入目录中(在实践中,请附带一个简短的脚本,
    cd
    以将其插入,运行该程序并
    cd
    退出该脚本)。如果您不想打扰第二个选项,则此方法非常有用。
  2. 更改您的代码以引用相对于脚本位置的数据文件。

由于多种原因,第二个选项更好,但是您必须

plot.py
稍微修改脚本(在本例中为)。

通常,您将使用该路径来

__file__
确定相对于脚本本身的位置。但是,使用时
cx_freeze
__file__
将不会定义,而您想要的路径将
sys.executable
改为。因此,您通常会执行以下 *** 作:(从cx_freeze常见问题解答中: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
在我最初链接的摘要文件中尚未完成。我将作为练习将其留给读者。)

完成此 *** 作后,

/path/to/where/the/directory/gets/copied/plot
无论当前工作目录是什么,都可以直接调用。

分布

我不会在这个话题上说太多。有很多方法可以解决这个问题。使用

cx_freeze
,您将交付一个充满库和一个可执行文件的文件夹。

在最简单的情况下,您只需将其涂焦油,然后告诉人们解压并运行

where/they/extracted/it/name_of_the_execuctable
。您可能希望将文件夹重命名为
exe.linux-x86_64-2.7
类似的名称,
my_package
并包含一个名为
run_this
或之类的shell脚本,但这取决于您。

在其他情况下,您可能需要编写包装脚本甚至

.desktop
文件。桌面文件必须具有绝对路径,因此在这种情况下,您需要做更多的事情。通常,您会编写某种类型的安装程序脚本,该脚本会进行修改
whatever.desktop
以指向程序安装位置的绝对路径。

可以将压缩的数据,库和可执行文件嵌入到“自解压”安装脚本中。如果您想深入了解网络上的示例,可以在网上找到。您还可以构建.rpm或.deb。同样,我将跳过详细的示例,然后由您自己解决。

总的来说,对于您似乎正在做的事情,交付压缩包和自述文件可能是最简单的方法。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5013957.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存