跳转到主要内容

仅使用Unicode字符生成数字的sparklines。

项目描述

https://img.shields.io/github/actions/workflow/status/deeplook/sparklines/python-package.yml https://img.shields.io/pypi/pyversions/sparklines.svg https://img.shields.io/pypi/v/sparklines.svg https://static.pepy.tech/badge/sparklines/month https://img.shields.io/pypi/status/sparklines.svg https://img.shields.io/pypi/format/sparklines.svg https://img.shields.io/pypi/l/sparklines.svg

此Python包实现了Edward Tufte的sparklines概念,但仅限于文本,例如:▃▁▄▁▅█▂▅(此内容可能不是在所有浏览器中正确显示)。您可以在维基百科上找到更多有关sparklines的信息。此代码主要用于在如图1所示的传感器网络中进行简单的合理性测试

example usecase with sensor values

图1:此类“sparklines”在命令行上的示例用法,显示物联网传感器值(不包括生成代码)。

由于可用的Unicode字符的限制,所有值都为正时效果最佳。即使如此,真正的sparklines看起来更像是线条而不是条形,这是一个真正的挑战,因为它们需要在不同的垂直位置上具有单根水平线的多个字符。这仅适用于专用字体,而这远远超出了此工具的范围,并且会显著复杂化其使用。因此,我们坚持使用以下字符:“▁▂▃▄▅▆▇█”,并使用空格表示缺失值。

此代码在某个时间点针对Python 2.6和2.7进行了测试,但现在不再支持已达到生命周期的结束的Python 2。现在通过Travis-CI测试了Python 3.5到3.8以及PyPy 3。

示例输出

这是一个记录的示例会话,展示了如何使用Sparklines(由于GitHub不支持嵌入Asciinema录制,您将看到指向相应asciicast)的图片

https://asciinema.org/a/5xwfvcrrk09fy3ml3a8n67hep.png

以下是一些命令行示例输出(请注意,在某些浏览器中,这些块字符的垂直对齐可能显示得稍微不正确,下面提到的其他仓库也可能会看到相同的效果)

以下代码的示例

$ sparklines 2 7 1 8 2 8 1 8
▂▇▁█▂█▁█
$ echo 2 7 1 8 2 8 1 8 | sparklines
▂▇▁█▂█▁█
$ sparklines < numbers.txt
▂▇▁█▂█▁█
$ sparklines 0 2. 1e0
▁█▅

安装

您可以使用来自Python软件包索引pip install sparklines安装此软件包。您还可以克隆此存储库,并通过python setup.py installpip install -e .安装它。安装后,您将可以通过程序或具有相同名称的命令行工具系统范围内(或如果您使用了虚拟环境,在虚拟环境中)访问sparklines

测试

要运行测试套件,下载并解压此存储库或克隆它,运行pip install pytest,然后在解压的归档文件中运行pytest tests命令。从下载的存储库的根目录执行。

用法

请注意,以下示例在某些浏览器中可能看起来有些奇怪(对齐不正确或甚至带颜色),但在您的终端、Python或IPython会话或您选择的Python IDE中打印时应完全正常。下面的图2可能比随后复制的示例代码更能清楚地说明您应该期待什么

example interactive invocation

图2:Python和IPython会话中的示例调用。

命令行

以下是两个命令行示例调用,已复制到本README中

$ sparklines 1 2 3 4 5.0 null 3 2 1
▁▃▅▆█ ▅▃▁

$ sparklines -n 2 1 2 3 4 5.0 null 3 2 1
  ▁▅█ ▁
▁▅███ █▅▁

程序化

以下是从交互式Python会话中的示例调用,已复制到本README中。主要使用的函数是sparklines.sparklines()

In [1]: from sparklines import sparklines

In [2]: for line in sparklines([1, 2, 3, 4, 5.0, None, 3, 2, 1]):
   ...:     print(line)
   ...:
▁▃▅▆█ ▅▃▁

In [3]: for line in sparklines([1, 2, 3, 4, 5.0, None, 3, 2, 1], num_lines=2):
    print(line)
   ...:
  ▁▅█ 
▁▅███ █▅▁

参考

此代码受到了Zach Holman的spark的启发,由Kenneth Reitz转换为名为spark.py的Python模块,并由RegKrieg转换为名为pysparklines的Python包。Roger Allen还提供了一个更短的spark.py

但由于它非常短,且在Python中易于编码,我们可以添加一些我认为缺少的额外功能,例如

  • 使用多行输出增加Sparkline的分辨率

  • 显示输入数字中的缺失数据

  • 对于负值发出警告(允许,但可能误导)

  • 如果可用termcolor包,使用不同颜色突出显示超过某些阈值的值

  • 在最大长度处包装长的Sparkline

  • (待办事项)在常规间隔添加分隔符字符,如:

项目详情


下载文件

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

源代码分发

sparklines-0.5.0.tar.gz (25.0 kB 查看哈希值)

上传时间 源代码

构建分发

sparklines-0.5.0-py3-none-any.whl (23.1 kB 查看哈希值)

上传时间 Python 3

支持