Python数据展示 - 生成表格图片
前言 前一篇文章介绍了推送信息到企业微信群里,其中一个项目推送的信息是使用Python自动生成的表格,本文来讲讲如何用Python生成表格图片。 选一个合适库 Python最大的优点就是第三方库丰富,基本你要什么功能,都能找到别人实现好的库,几行代码一调用就完事了。 Pytable 项目地址:https://github.com/HiroshiARAKI/pytable 最先找到的是日本人开发的p
目录7 个章节
前言
前一篇文章介绍了推送信息到企业微信群里,其中一个项目推送的信息是使用Python自动生成的表格,本文来讲讲如何用Python生成表格图片。
选一个合适库
Python最大的优点就是第三方库丰富,基本你要什么功能,都能找到别人实现好的库,几行代码一调用就完事了。
Pytable
项目地址:https://github.com/HiroshiARAKI/pytable
最先找到的是日本人开发的pytab库,它是基于matplotlib来画图的,默认参数下生成的表格外观一般般,而且显示不了中文字符,字体也很小,效果不理想。
我一开始还抱着死磕的心态,把这个库的源码下载下来魔改,改了字体和大小,生成的表格终于能看了,但排版还是会出各种奇奇怪怪的问题,比如文字溢出单元格之类的,心累……
Plotly
官网地址:https://plotly.com/
后面找到了一个新的库:plotly,官网的介绍是:
专门为机器学习和数据科学设计的前端展示工具,单纯拿来画表格还算大材小用了~ 它是用网页来渲染的,看例子效果还可以,我就换成这个plotly试试,嗯,真的可以,那就这个了。
本文会分别介绍这两个库的使用,包括我魔改了pytab的地方。
(不过还是推荐plotly,网页渲染就是好)
pytab
首先安装
pip install pytab
然后我把画表格的代码封装成一个函数
import uuid
from typing import List, Dict, Optional, Tuple
import pytab
def draw_table(data: Dict[str, list]):
"""
画表格
:param data: 数据格式 {
'a': [1.0, 2.1, 3.5, 4.0, 2.0, 1.0, 2.1, 3.5, 4.0, 2.0, ],
'b': [5.7, 6.1, 7.2, 8.3, 1.2, 5.7, 6.1, 7.2, 8.3, 1.2, ],
}
:return:
"""
# 设置字体,不然显示不了中文
pytab.plt.rcParams["font.sans-serif"] = ["SimHei"]
pytab.table(
data=data,
data_loc='center',
# th_type='dark',
th_c='#aaaaee', # 设置表头背景颜色
td_c='gray', # 设置数据行背景颜色
table_type='striped',
figsize=(len(data.keys()), int(len(data.values()) / len(data.keys()) + 1)),
# fontsize=18,
)
# pytab.show()
temp_file = os.path.join(tempfile.gettempdir(), f'{uuid.uuid4().hex}.jpg')
print(temp_file)
pytab.save(temp_file)
return temp_file
按照注释的这个数据格式,a和b是表头列名,后面的数组是每一列的数据,很好理解
{
'a': [1.0, 2.1, 3.5, 4.0, 2.0, 1.0, 2.1, 3.5, 4.0, 2.0, ],
'b': [5.7, 6.1, 7.2, 8.3, 1.2, 5.7, 6.1, 7.2, 8.3, 1.2, ],
}
画出来的表格是这样的

再来试试中文显示会怎么样
{
'列1': [1.0, 2.1, 3.5, 4.0, 2.0, 1.0, 2.1, 3.5, 4.0, 2.0, ],
'列2': [5.7, 6.1, 7.2, 8.3, 1.2, 5.7, 6.1, 7.2, 8.3, 1.2, ],
}
画出来是这样

有点丑吧,勉强能看
OK~ 关于pytab的就不多折腾了,毕竟上限就在这了
接下来看看plotly
plotly
首先安装
pip install plotly
话不多说,老规矩,我又是写成一个函数
import uuid
from typing import List, Dict, Optional, Tuple
import plotly.graph_objects as go
import plotly.io as pio
def draw_table(headers: List[str], cells: List[list]):
"""
画表
:param headers: header=dict(values=['A Scores', 'B Scores'])
:param cells: cells=dict(values=[[100, 90, 80, 90], [95, 85, 75, 95]])
:return:
"""
pio.kaleido.scope.default_width = len(','.join(headers)) * 20
pio.kaleido.scope.default_height = 250 + len(cells[0]) * 20
fig = go.Figure(data=[go.Table(header=dict(values=headers), cells=dict(values=cells))])
# fig.show()
image_file = os.path.join(tempfile.gettempdir(), f'{uuid.uuid4().hex}.jpg')
print('write image to', image_file)
fig.write_image(image_file)
return image_file
这次的参数格式更前面的pytab不一样,要传两个参数,都是数组类型
第一个是表头,第二个数组是单元格
先来个例子试试
draw_table(['列A', '列B'], [[100, 90, 80, 90], [95, 85, 75, 95]])
然后把上面函数代码里的fig.show()注释去掉,可以看到生成的表格图片效果
运行后可以发现自动打开了浏览器,因为这个库是使用网页来渲染表格的,效果如下

效果比前面那个pytab好一些,哈哈~
OK,就这样啦。
下次分享一些关于最近用Django开发后台的。
参考资料
- python用prettytable输出漂亮的表格:https://linuxops.org/blog/python/prettytable.html
- Plotly关于表格的文档:https://plotly.com/python/table/
- Plotly关于导出图片的文档:https://plotly.com/python/static-image-export/
- python将表格展示的数据生成图片:https://www.jianshu.com/p/3bfbf1bf0699
_EOF_
Python数据展示 - 生成表格图片
- 本文作者:
- 程序设计实验室
- 版权声明:
- 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
相关文章
我用Qt和Python开发了一个视频合并工具
想合并视频,但是却找不到比较好用的工具,很多都要收费,我想着「这破功能还得收费?」,于是决定自己搞一个,一开始用Python做了一个,效果还不错,完美完成了我的视频合并任务,不过没有图形界面,想分享给朋友一起用也没办法,于是昨天用Qt写了个图形界面套上去,中间还是遇到一些问题的,通过这篇文章记录一下。 软件的界面就是这样啦,用Qt Designer随便拖出来的,和VS拖控件也差不了多少。 用起来挺
2021-12-18 · Python · 约 1 分钟
现代 Python 程序优雅处理日期时间的避坑指南
Python 时间处理还是得踩坑?`datetime`、`time`、`calendar` 搞得人头大,Naive vs Aware 时区陷阱更是坑爹。2026 年了还用 `pytz`?标准库 `ZoneInfo` 加上 `Pendulum`、`Arrow` 才叫现代化,至少不用再写反人类的时间字符串解析。数据库存 UTC,前端传 ISO 8601,简单点行不行?
2026-03-25 · Python · 约 1 分钟
Python网络请求库,从 requests 到 httpx
Requests早该退休了,httpx这老古董才配活在异步时代?HTTP/2和超时?这些基本配置requests早该有。异步支持原生?别逗了,这年头谁还用同步。
2026-03-27 · Python · 约 1 分钟
Python接入企业微信推送信息到内部群里
前言 之前一篇文章提到了使用wechatpy库来实现企业微信应用登录:Django + Taro 前后端分离项目实现企业微信登录 其实这个库可以实现的功能非常多,基本微信开发涉及到的功能都能实现。 本文介绍一个很常用的场景:实时推送信息到企业微信群里。 安装 首先安装wechatpy库 pip install wechatpy 如果运行的时候提示需要安装其他库(比如加解密相关的)那就按照提示安装,
2022-04-08 · Python · 约 1 分钟
讨论
共 0 条加载评论中…