跳转到主要内容

A Textual widget wrapper for the Plotext plotting library

项目描述

textual-plotext

PlotextPlot in action

这是一个用于Plotext绘图库的Textual小部件包装器。Plotext绘图库

简介

该库提供一个小部件:PlotextPlot。这个小部件提供了一个plt属性,您应该将其用于通常使用plt的地方,如Plotext文档中所示。

让我们看看Plotext README中的第一个例子

import plotext as plt
y = plt.sin() # sinusoidal test signal
plt.scatter(y)
plt.title("Scatter Plot") # to apply a title
plt.show() # to finally plot

这个Textual等价物(包括使此应用程序完全工作的所有必需内容)是

from textual.app import App, ComposeResult

from textual_plotext import PlotextPlot

class ScatterApp(App[None]):

    def compose(self) -> ComposeResult:
        yield PlotextPlot()

    def on_mount(self) -> None:
        plt = self.query_one(PlotextPlot).plt
        y = plt.sin() # sinusoidal test signal
        plt.scatter(y)
        plt.title("Scatter Plot") # to apply a title

if __name__ == "__main__":
    ScatterApp().run()

值得注意的主要差异是

  • 我们没有直接导入plotext
  • 我们使用PlotextPlot.plt而不是plt
  • 我们没有调用Plotext的show方法,PlotextPlot会处理这个问题。

安装

可以从PyPi安装此库

$ pip install textual-plotext

安装完成后,您可以通过运行演示来快速测试库

$ python -m textual_plotext

演示应用程序包括Plotext README中显示的许多示例。

更长的示例

要查看如何使用 PlotextPlot 小部件的更长时间示例,请参阅 examples/textual_towers_weather.py。作为额外奖励,它还展示了如何使用 Textual 的 worker API 创建一个 线程化工作线程 从后端获取数据。

支持什么?

以下实用函数提供(通过 PlotextPlot.plt

  • plt.sin
  • plt.square
  • plt.colorize
  • plt.uncolorize

不支持什么?

有些函数根本不支持;主要是指那些在 Textual 应用程序中不合理的函数。这些包括

  • plt.interactive
  • plt.script_folder
  • plt.parent_folder
  • plt.join_paths
  • plt.save_text
  • plt.read_data
  • plt.write_data
  • plt.download
  • plt.delete_file
  • plt.test
  • plt.time
  • plt.test_data_url
  • plt.test_bar_data_url
  • plt.test_image_url
  • plt.test_gif_url
  • plt.test_video_url
  • plt.test_youtube_url

以下属性和子模块也不公开,因为它们也设计为基于 REPL 的交互式使用,并不适合在 Textual 应用程序中使用

  • plt.doc
  • plt.markers
  • plt.colors
  • plt.styles
  • plt.themes

此外,目前尚不支持 GIF 图表播放视频;其中之一或两个可能会在未来某个时候实现。

哪些函数是 no-ops?

一些函数作为调用是受支持的,但被重新定义为非操作;这些是通常不会产生负面影响的代码,但在 Textual 应用程序中并不合理。这些包括

  • plt.clear_terminal
  • plt.show
  • plt.save_fig

主题

Plotext 有 主题系统。Plotext 提供的主题由 PlotextPlot 支持。然而,其中一些主题使用 "ANSI 颜色",因此可能在不同的终端上看起来不同,以及使用的终端主题(如果您的终端支持主题);这里的问题是您的图表可能在不同的环境中看起来非常不同。

为了解决这个问题,textual-plotext 提供了那些主题的额外副本集,所有这些副本都以 textual- 为前缀,使用全 RGB 颜色来确保在给定 Plotext 主题时,在任何地方看起来都一样。

除了 Plotext 主题之外,textual-plotext 还添加了两个名为

  • textual-design-dark
  • textual-design-light

这两个是两个类似的主题,设计用于在暗模式和浅模式下看起来很好。默认情况下,PlotextPlot 将使用这些主题,并在您的 Textual 应用程序在暗模式和浅模式之间切换 时在这些主题之间切换。如果您想关闭这种行为,只需将您的图表的 auto_theme 属性设置为 False 即可。

已知问题

目前,由于 Plotext 在重复调用 showbuild[^1] 时似乎存在一个错误,对于设置为 "log" 的 x 或 y 尺度的图表,无法轻松构建此类图表。换句话说,即使在 Plotext 自身的 REPL 中,这个会话

>>> import plotext as plt
>>> plt.xscale("log")
>>> plt.plot(plt.sin(periods=2, length=10**4))
>>> plt.show()
<plot is drawn in the terminal here>
>>> plt.show()

导致 ValueError: math domain error

有一个解决方案,这适用于 Plotext 的一般使用,并在 Textual 应用程序中也表现得很好。在第一次 showbuild 之后,将问题比例返回到 "linear"。因此,上面的 REPL 会话应该变为

>>> import plotext as plt
>>> plt.xscale("log")
>>> plt.plot(plt.sin(periods=2, length=10**4))
>>> plt.show()
<plot is drawn in the terminal here>
>>> plt.xscale("linear")     # Note this here!
>>> plt.show()
<plot is drawn in the terminal here>
>>> plt.show()
<plot is drawn in the terminal here>
etc...

在一个 Textual 应用程序中,这意味着在创建图表的代码末尾添加以下内容(假设这里的问题是 xscale

_ = self.plt.build()
self.plt.xscale("linear")

需要更多帮助?

如果您需要关于这个库的帮助,或者与Textual相关的问题,请随时加入Textualize 开发者 在Discord上其他我们提供支持的地方

[^1]: 当需要重新渲染图表时(例如,在调整大小的情况下),会重复调用build方法。

项目详情


下载文件

下载适合您平台文件的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

textual_plotext-0.2.1.tar.gz (16.4 kB 查看哈希值)

上传时间 源代码

构建分发

textual_plotext-0.2.1-py3-none-any.whl (16.5 kB 查看哈希值)

上传时间 Python 3

支持者