与其他人分享来自 mpldatacursor 的图像

2023-12-06

我正在使用这个例子当鼠标悬停在数据上时如何显示数据标签制作当您将鼠标悬停在点上时会出现数据的图像。这确实很好用,但是有什么方法可以保存它以便我可以将图像发送给其他人吗?我不确定哪些格式支持“工具提示”,但 pdf 和 svg 都支持,也许还有其他方法?

如果我需要打包可执行文件,在 Linux 中最简单的方法是什么?


正如您所建议的那样,可能有一些方法可以使事情与 svg 和一些 javascript 或 pdf 工具提示一起工作(在您提到它们之前我不知道 pdf 工具提示存在!)。

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

但是,我不确定如何使 matplotlib 的 svg 文件通常具有交互性,并且您提到您不想走 javascript 路线,所以我将引导您构建一个“独立”可执行文件(或者更确切地说, ,一个包含可执行文件和关联库的目录)。

使用以下命令构建“独立”可执行文件cx_freeze and 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 它创建的构建目录以发送给其他人。 (您可能想做一些更奇特的事情。可以制作包含 tar 数据、库和可执行文件的 shell 脚本,但我将在这里跳过这一部分。)

制作setup.py file

setup.py。假设您有一个名为的简单脚本plot.py其中包含一些基本的绘图代码和一个名为data.csv与您想要绘制的数据matplotlib等。setup.py归档cx_freeze看起来像这样:(另外,为了简单起见,我假设您正在使用 matplotlib 的 Tk 后端。如果您没有使用,情况看起来会略有不同。)

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. The "includes"部分中的build_exe_options. cx_freeze会尝试自动猜测它需要包含哪些模块,但在某些情况下不可能检测到它需要的所有模块。此部分允许您指定要显式包含的其他模块。 matplotlib 后端通常无法正确自动检测,因此您需要显式包含您正在使用的后端。
  3. The "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'])

其余部分是相当不言自明的。您可能需要填写描述、版本等,但这不是构建可执行文件所必需的。

Building

所以此时,我们有一个内容类似于以下内容的目录:

$ ls
data.csv  plot.py  setup.py

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

要构建可执行文件,我们需要运行

python setup.py build_exe

您将获得很长的构建日志以及它正在复制的内容(可能还有一些在大多数情况下可以安全忽略的警告)。 (这是有用的信息,可用于调试您的问题setup.py file.)

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

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

在此刻,build将包含一个名为类似于以下内容的目录:

$ ls build
exe.linux-x86_64-2.7

The exe.whatever目录包含库、数据和可执行文件,您需要将它们分发给人们才能正确运行。

要查看它是否有效,请尝试(注意明确的cd进入目录!!稍后会详细介绍。):

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

(显然,如果你上面的文件没有被调用plot.py,可执行文件不会被调用plot,但你明白了。)

此时,您可以将exe.whatever目录(可能想在打包之前重命名),将其发送出去,并告诉人们通过解压和调用来运行它cd name_of_dir; ./plot.

关于数据路径的注意事项

我提到过我们目前需要明确cd在运行之前进入目录。这纯粹是因为以下事实:plot.py寻找一个名为data.csv 在当前目录下.

换句话说,有一行plot.py这样做:

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

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

您有两个选择:

  1. Always 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', ...)

to do:

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

反而。 (这在plot.py文件在g我最初链接到的。我将把它留给读者作为练习。)

一旦我们完成此操作,您就可以致电/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并包含一个名为的 shell 脚本run_this或其他什么,但这取决于你。

在其他情况下,您可能想要编写一个包装脚本,甚至是一个.desktop文件。桌面文件必须有绝对路径,因此在这种情况下您需要做更多的事情。通常,您编写某种类型的安装程序脚本来修改whatever.desktop指向程序安装位置的绝对路径。

可以将压缩后的数据、库和可执行文件嵌入到“自解压”安装脚本中。如果您想深入了解,网上有一些示例。您还可以构建 .rpm 或 .deb。再次,我将跳过详细的示例,并将其留给您来解决。

总的来说,对于您似乎正在做的事情,发送 tarball 和 README 可能是最简单的途径。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

与其他人分享来自 mpldatacursor 的图像 的相关文章

  • 如何在 Sublime Text 2 的 OSX 终端中显示构建结果

    我刚刚从 TextMate 切换到 Sublime Text 2 我非常喜欢它 让我困扰的一件事是默认的构建结果显示在 ST2 的底部 我的程序产生一些很长的结果 显示它的理想方式 如在 TM2 中 是并排查看它们 如何在 Mac 操作系统
  • 如何在网站上使用 svg 元素制作块的屏幕截图?

    我在网站上创建了一个构造函数 其本质是将所选元素及其颜色 svg中的元素 添加到访问者选择的背景和背景颜色 png中的背景 中 然后必须单击 保存 结果 按钮并仅执行工作区的屏幕截图 我写了这个脚本 但它需要屏幕截图 但只有背景 并忽略选定
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • 如何使用间隙分隔pdf中的段落?

    我有一些 pdf 文件 每页有 2 3 个段落 每个段落都由一些行间隙分隔 但是在使用 pymupdf 阅读时 我看不到段落之间有任何机器可打印的分隔符 还有其他方法吗 其他图书馆可以做到这一点吗 code import fitz from
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • 使用 jspdf 将 Svg 渲染为 Pdf

    我在使用 jspdf 将 svg 元素渲染为 pdf 时遇到问题 我正在使用插件https github com CBiX svgToPdf js https github com CBiX svgToPdf js 去做这个 下面是我的代码
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • 为 pandas 数据透视表中的每个值列定义 aggfunc

    试图生成具有多个 值 列的数据透视表 我知道我可以使用 aggfunc 按照我想要的方式聚合值 但是如果我不想对两列求和或求平均值 而是想要一列的总和 同时求另一列的平均值 该怎么办 那么使用 pandas 可以做到这一点吗 df pd D
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • 在pyyaml中表示具有相同基类的不同类的实例

    我有一些单元测试集 希望将每个测试运行的结果存储为 YAML 文件以供进一步分析 YAML 格式的转储数据在几个方面满足我的需求 但测试属于不同的套装 结果有不同的父类 这是我所拥有的示例 gt gt gt rz shorthand for
  • 当玩家触摸屏幕一侧时,如何让 pygame 发出警告?

    我使用 pygame 创建了一个游戏 当玩家触摸屏幕一侧时 我想让 pygame 给出类似 你不能触摸屏幕两侧 的错误 我尝试在互联网上搜索 但没有找到任何好的结果 我想过在屏幕外添加一个方块 当玩家触摸该方块时 它会发出警告 但这花了很长
  • HTTPS 代理不适用于 Python 的 requests 模块

    我对 Python 还很陌生 我一直在使用他们的 requests 模块作为 PHP 的 cURL 库的替代品 我的代码如下 import requests import json import os import urllib impor
  • Python - 在窗口最小化或隐藏时使用 pywinauto 控制窗口

    我正在尝试做的事情 我正在尝试使用 pywinauto 在 python 中创建一个脚本 以在后台自动安装 notepad 隐藏或最小化 notepad 只是一个示例 因为我将编辑它以与其他软件一起使用 Problem 问题是我想在安装程序
  • 设置 torch.gather(...) 调用的结果

    我有一个形状为 n x m 的 2D pytorch 张量 我想使用索引列表来索引第二个维度 可以使用 torch gather 完成 然后然后还设置新值到索引的结果 Example data torch tensor 0 1 2 3 4
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 协方差矩阵的对角元素不是 1 pandas/numpy

    我有以下数据框 A B 0 1 5 1 2 6 2 3 7 3 4 8 我想计算协方差 a df iloc 0 values b df iloc 1 values 使用 numpy 作为 cov numpy cov a b I get ar
  • Python:元类属性有时会覆盖类属性?

    下面代码的结果让我感到困惑 class MyClass type property def a self return 1 class MyObject object metaclass MyClass a 2 print MyObject
  • 有效地绘制大时间序列(matplotlib)

    我正在尝试使用 matplotlib 在同一轴上绘制三个时间序列 每个时间序列有 10 6 个数据点 虽然生成图形没有问题 但 PDF 输出很大 在查看器中打开速度非常慢 除了以栅格化格式工作或仅绘制时间序列的子集之外 还有其他方法可以获得

随机推荐

  • Meteor、MongoDB通过订阅获取部分数组

    我有一个关于如何使用 MongoDB 和 MeteorJS 获取数组的某个元素的问题 我的用户文档有以下架构 bankList id 34567890987654345678 name xfgchjbkn type credit id 09
  • 如何避免在无基础合并后必须合并存储库中的每个文件?

    我们在进行 TFS Baseless Merge 后遇到了一些麻烦 以下是我们目前拥有的分支机构的快速摘要 Main BranchA BranchB BranchA1 BranchB1 我们使用 特定版本之前的所有更改 进行了无根据的合并B
  • 如何向每个单元添加 UIActivity 指示器并保持对每个单独指示器的控制

    我正在尝试向 UITableView 中的某些单元格添加活动指示器 我在 didSelectRowAtIndexpath 方法中成功完成此操作 使用 CGRect CellFrame CGRectMake 260 10 20 20 acti
  • 如何在编辑(imagebutton)上绑定GridView的EditItemTemplate中的ASP.Net DropDownList控件单击[重复]

    这个问题在这里已经有答案了 我需要在 GridView 的 EditItemTemplate 中绑定 ASP Net DropDownList 控件 我有一个带有 commandname Edit 的编辑图像按钮 下拉列表也需要从不同的表
  • 在 XP 或 Vista/7 上的 VB.NET & WPF 或 WinForms 中向标题栏添加按钮(如 Firefox 4)

    我想知道是否可以在 vb net 中的标题栏添加一个按钮 我找到了一种在其中一个或另一个中执行此操作的方法 但是是否可以在两者上都执行此操作 以下是禁用 Aero 时有效的代码 导入 System RunTime InteropServic
  • 将带有表达式的字符串转换为十进制

    我有一个表 其中有一列 Faktor varchar 50 其中包含以下表达式 1 3 2 9 5 0 567 0 23 不 我正在寻找一种执行选择的方法 例如 select Faktor from Artikel 它应该返回带有值的十进制
  • 适用于 Chrome 的 Android ARC 应用程序,为不同的活动/布局设置窗口大小

    对于那些不知道什么是 ARC 的人 https developer chrome com apps getstarted arc 如何根据正在运行的活动或可见的布局手动设置窗口的大小 比如这个活动太高 太宽 虽然我希望下一个活动是全屏的 窗
  • 使用 .DrawToBitmap - 如何更改图像的分辨率?

    我在用着DrawToBitmap将一些标签保存为图像 我想知道如何改变这些图像的分辨率 有什么办法吗 假设我有一个带有文本的标签 我想将其渲染为图像文件 不发布完整代码 this label1 new System Windows Form
  • 使用 LibGit2Sharp 进行 Bitbucket 身份验证

    我使用 CSharp Bitbucket 库通过 Bitbucket 对用户进行身份验证 https github com scottksmith95 CSharp Bitbucket 身份验证工作正常 我得到了令牌值和令牌秘密值 我已经在
  • 无法在 xcode 中调整视图大小

    我似乎无法调整视图大小以填充模拟器中的屏幕 请参见下面的屏幕截图 注意顶部和底部的黑线 有谁知道我如何解决这个问题 Thanks Matt 此问题的原因是您尚未在项目中添加启动图像或故事板 您需要将启动图像添加到您的xcasset文件夹或者
  • C++ 中 i++++ 增量是什么

    谁能告诉我c 中i 自增的过程是什么 这是一个语法错误 使用最大咀嚼规则 i 被标记为 i 最后 是二元加法运算符 但显然它没有两个操作数 这会导致解析器错误 EDIT 评论中的问题 我们可以吗i j 它被标记为 i j 这又是一个语法错误
  • 跨多种语言的语义相似度

    我正在使用词嵌入来查找两个句子之间的相似性 使用 word2vec 如果一个句子是英语 另一个句子是荷兰语 我还可以获得相似性度量 尽管不是很好 所以我开始想知道是否可以计算两种不同语言的两个句子之间的相似度 没有明确的翻译 特别是如果这些
  • 通过命令行控制劳特巴赫

    我的条件是我必须将多个输出文件一一刷新到 mpc 控制器 我们使用lauterbach的GUI来进行软件的烧写和运行 现在我想通过 gt 命令行参数做同样的事情 请有人向我解释一下通过命令提示符控制劳特巴赫需要什么 我想使用 Lauterb
  • 使用 jQuery 切换下一个元素

    我有一个问题this元素 我知道如何this工作中 我有很多这样的 html 结构 当我点击 a 按钮时 带有 class 的 divextra options必须显示 但由于我在整个过程中重复了很多相同的 html 结构 因此当我单击按钮
  • 为什么我的自定义字体在某些浏览器中存在位置偏移?

    在我的网站 www monkey touch com 上工作时 我开始在标题和其他几个地方使用自定义字体 它看起来很棒 并且由于 font squirrel 它可以在所有浏览器上运行 然而 我后来意识到字体在某些浏览器中的呈现方式有所不同
  • 应用程序小部件中的 AdapterViewFlipper:setPendingIntentTemplate() 和 setOnClickFillInIntent() 不起作用

    我正在将应用程序小部件中的 ListView 更改为 AdapterViewFlipper 问题是 我需要处理对某个项目的点击 它可以完美地使用 setPendingIntentTemplate 将待处理的意图模板设置为整个 ListVie
  • 将 UIImageView 转换为 UIImage

    我正在处理图像 我有大量图像 并且我正在从服务器实时下载它们 然后使用AsyncImageView类 但知道我正在使用自定义类 这需要UIImage代替UIImageView 问题 有什么好的方法可以转换吗UIImageView to UI
  • 按下后退按钮时完成所有活动

    我有一个 Android 应用程序 有 3 个活动 对于第一个和第二个活动 我希望后退按钮退出所有现有活动 此时后退按钮正在退出它启动的活动 但如果在第二个活动上按下后退按钮 则将显示第一个活动 而不是退出应用程序 因为第一个活动会导致第二
  • Cloud Firestore 相当于实时数据库“.info/connected”参考吗?

    我已开始从 Firebase 实时数据库迁移到 Cloud Firestore 我需要一种方法 让应用程序在 Firestore 的连接状态发生变化时 从在线到离线 反之亦然 收到警报 为了清楚起见 我不需要将其写入数据库以供应用程序的其他
  • 与其他人分享来自 mpldatacursor 的图像

    我正在使用这个例子当鼠标悬停在数据上时如何显示数据标签制作当您将鼠标悬停在点上时会出现数据的图像 这确实很好用 但是有什么方法可以保存它以便我可以将图像发送给其他人吗 我不确定哪些格式支持 工具提示 但 pdf 和 svg 都支持 也许还有