首页Python【Python计算生态】p...

【Python计算生态】plotext——在终端绘制文本图形

Python受欢迎的原因之一就是其计算生态丰富,据不完全统计,Python 目前为止有约13万+的第三方库。

本系列将会陆续整理分享一些有趣、有用的第三方库。

文章配套代码获取有以下两种途径:
  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/1FSGLd7aI_UQlCQuovVHc_Q?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/Python_Ecosystem





01
简介

plotext是一个开源的Python第三方库,专门用于在终端(命令行)环境中创建和显示图表。
    • 支持多种图表类型:包括折线图、散点图、柱状图、直方图、日期时间图(如K线图);
    • 丰富的绘图功能:可以绘制误差线、混淆矩阵,并在图表中添加额外的文本、线条和形状;
    • 图像和视频支持:支持在终端中绘制图像(包括GIF动画)和播放带有音频的视频(包括YouTube视频);
    • 保存图表:可以将图表保存为文本或彩色HTML格式;
    • 无依赖性:除了图像和视频功能外,plotext无需额外依赖;
    • 命令行工具:提供了一个专用的命令行工具;
    • 语法简洁:其API设计类似于matplotlib,易于上手。
    • 安装:
    • 普通安装:
    pip install plotext
    • 可选依赖包安装:
    可选依赖包包括:pillow(用于图像绘制)、opencv-python(用于视频渲染)、ffpyplayer(用于音频流)、pafyyoutube-dl(用于YouTube流)、shtab(用于TAB自动补全)。
    安装图像绘制所需的可选依赖项:
    pip install "plotext[image]"
    安装视频渲染所需的可选依赖项,这也将允许绘制图像:
    pip install "plotext"
    启用命令行工具中的TAB自动补全功能:
    pip install "plotext[completion]" 

    02
    使用

    plotext支持多种图表类型、图像绘制以及视频播放。

    • 基本图表绘制:

    plotext在绘制图表时,支持设置线条颜色、标记样式等,以增强图表的可视化效果。

    • 散点图:

    使用scatter()函数绘制散点图并设置样式,同时添加参考线。

    ### 文件名 : BasicPlot.py ###

    # 导入 plotext 库,并将其重命名为 plt,方便后续使用
    import plotext as plt

    # 调用sin()函数生成正弦波数据,将生成的数据赋值给变量 y
    y = plt.sin() 

    # 使用 scatter() 函数绘制散点图
    # y为要绘制的数据
    # color="red" 表示散点的颜色为红色
    # marker="o" 表示散点的标记形状为圆形
    # label="y=sin(x)" 为该散点图添加标签,用于图例显示
    plt.scatter(y, color="red", marker="o", label="y=sin(x)")

    # 设置图表的标题为 "Extra Lines"
    plt.title("Extra Lines")

    # 绘制一条垂直直线
    # 100 表示直线在 x 轴上的位置
    # "magenta" 表示直线的颜色为洋红色
    plt.vline(100, "magenta")

    # 绘制一条水平直线
    # 0.5 表示直线在 y 轴上的位置
    # "blue+" 表示直线的颜色为蓝色,并且用 + 号来绘制直线
    plt.hline(0.5, "blue+")

    # plot_size() 方法用于设置活动子图的绘图尺寸(以字符大小为单位)
    # 这里将绘图的宽度设置为 200 个字符,高度设置为 20 个字符
    plt.plotsize(200, 20)

    # 显示绘制好的图表
    plt.show()

    # 保存为文本文件
    # save_fig() 方法将当前绘制的图表保存为文本文件
    # "./plot.txt" 表示保存的文件路径和文件名,保存的是无颜色的文本格式
    plt.save_fig("./plot.txt")

    绘制效果如下图所示:

    • 柱状图:

    使用bar()函数绘制柱状图,并为每个柱状图添加文本标签。

    ### 文件名 : BarPlot.py ###

    # 导入 plotext 库
    import plotext as plt

    # 定义一个包含不同披萨种类的列表
    pizzas = ["Sausage""Pepperoni""Mushrooms""Cheese""Chicken""Beef"]
    # 定义一个列表,存储每种披萨对应的百分比数据
    percentages = [14, 36, 11, 8, 7, 4]

    # 使用 plotext 的 bar 函数绘制柱状图
    # pizzas 作为 x 轴数据,表示不同的披萨种类
    # percentages 作为 y 轴数据,表示每种披萨对应的百分比
    plt.bar(pizzas, percentages)

    # 设置图表的标题,用于描述图表的主题
    plt.title("Labelled Bar Plot using Text()")

    # 使用列表推导式为每个柱状图添加文本标签
    # 对于 pizzas 列表中的每个元素,执行以下操作:
    # plt.text 函数用于在指定位置添加文本
    # pizzas[i] 是要显示的文本内容,即披萨的种类
    # x = i + 1 表示文本在 x 轴上的位置,i 是当前元素的索引,加 1 是为了确定合适的位置
    # y = percentages[i] + 1.5 表示文本在 y 轴上的位置,在对应柱状图的高度基础上加 1.5,使文本显示在柱子上方
    # alignment = 'center' 表示文本居中对齐
    # color = 'red' 表示文本的颜色为红色
    [plt.text(pizzas[i], x = i + 1, y = percentages[i] + 1.5, alignment = 'center', color = 'red'for i in range(len(pizzas))]

    # 设置 y 轴的显示范围
    # 下限为 0,上限为 38,确保所有数据能在合理的范围内显示
    plt.ylim(0, 38)

    # 设置绘图区域的大小
    # 宽度为 100 个字符单位,高度为 30 个字符单位
    plt.plotsize(100, 30)

    # 显示绘制好的图表
    plt.show()

    绘制效果如下图所示:


    • 多图绘制:

    plotexty可以通过构建子图的方式在同一个终端窗口中绘制多个图表。

    构建子图网格的操作基本符合直觉,只需使用subplots(rows , cols)方法来构建一个包含rows x cols个子图的网格,再使用subplot()方法来访问指定行和列位置(从子图矩阵的左上角开始计数,起始索引为 1)的特定子图,并确定在其中绘制的数据内容以及绘制方式。

    另外,子图可以进行嵌套,即任何一个子图都可以创建属于它自己的子图矩阵。例如,要创建一个 2×2 的子图矩阵,其中第一个子图本身又是一个 3×4 的子图矩阵,可以使用subplots(2, 2); subplot(1, 1); subplots(3, 4),或者直接写成subplots(2, 2).subplot(1, 1).subplots(3, 4)

    ### 文件名 : MultiplePlot.py ###

    # 导入 plotext 库
    import plotext as plt
    # 导入 numpy 库,用于进行数值计算和生成数据
    import numpy as np

    # 生成数据
    # 使用 numpy 的 linspace 函数生成从 0 到 10 之间均匀分布的 100 个点,作为 x 轴的数据
    x = np.linspace(0, 10, 100)
    # 计算 x 对应的正弦值,得到 y1 数据
    y1 = np.sin(x)
    # 计算 x 对应的余弦值,得到 y2 数据
    y2 = np.cos(x)

    # 创建一个 2 行 1 列的子图布局
    plt.subplots(2, 1)

    # 绘制第一个图表
    # 选择 2 行 1 列子图布局中的第 1 行第 1 列的子图进行绘图
    plt.subplot(1, 1)
    # 使用 plotext 的 plot 函数绘制 x 和 y1 的折线图
    plt.plot(x, y1)
    # 设置第一个子图的标题为 "Sine Wave"
    plt.title("Sine Wave")

    # 绘制第二个图表
    # 选择 2 行 1 列子图布局中的第 2 行第 1 列的子图进行绘图
    plt.subplot(2, 1)
    # 使用 plotext 的 plot 函数绘制 x 和 y2 的折线图
    plt.plot(x, y2)
    # 设置第二个子图的标题为 "Cosine Wave"
    plt.title("Cosine Wave")

    # 显示图表
    # 调用 plotext 的 show 函数将绘制的图表显示在终端中
    plt.show()

    绘制效果如下图所示:


    • 图像绘制:

    使用image_plot(path)函数绘制图像,使用play_gif(path)函数渲染GIF图像。

    绘制图像时有以下注意事项:

    • 建议在调用image_plot()之前使用plotsize()方法,尤其是对于较大的图像,以便预先减小图像大小,从而减轻计算负担。

    • 如果希望绘制速度更快,可以将fast参数设置为True。在这种情况下,绘图尺寸将锁定为之前选择的大小,不会适应终端或子图的大小;此外,后续的任何设置方法(如xlabel()frame()等)都不会生效。

    • 如果要绘制 超出终端大小 的图像,请使用plt.limit_size()函数,或者使用基于tkinter的应用程序。

    ### 文件名 : ImagePlot.py ###

    # 导入 plotext 库
    import plotext as plt

    # 要绘制的图像文件的路径
    path = './logo.jpg'

    # 使用 plotsize 函数设置绘图区域的大小
    # 这里将绘图区域的宽度和高度都设置为 64 个字符单位
    plt.plotsize(64, 64)

    # 使用 image_plot 函数在终端中绘制指定路径的图像
    # path 参数指定要绘制的图像文件的路径
    # marker 参数指定用于绘制图像的字符列表,这里使用 "codedesigner" 中的字符
    # style 参数设置图像的显示样式,'inverted' 表示使用反转样式
    # grayscale 参数设置为 True,表示以灰度模式绘制图像,即只显示黑白效果
    plt.image_plot(path,
                   marker=list("codedesigner"),
                   style='inverted',
                   # grayscale=True  # 以灰度模式绘制图像
                  )

    # 使用 title 函数为当前绘制的图像设置标题,标题会显示在图像的上方
    plt.title("码农设计师")

    # 调用 show 函数将绘制好的图像在终端中显示出来
    plt.show()

    # 使用 save_fig 函数将当前绘制的图像保存为文件
    # 该文件将以彩色 HTML 格式保存,包含图像的颜色信息
    plt.save_fig("./plot.html")

    绘制效果如下图所示:


    更多内容可以前往GitHub页面查看:

    https://github.com/piccolomo/plotext

    本篇文章来源于微信公众号: 码农设计师

    RELATED ARTICLES

    欢迎留下您的宝贵建议

    Please enter your comment!
    Please enter your name here

    - Advertisment -

    Most Popular

    Recent Comments