WitTkChart:基于Python tkinter Canvas的开源图表可视化库
WitTkChart
WitTkChart是一个基于Python tkinter Canvas的开源图表可视化库,允许用户通过简单的API调用创建和更新多种精美的图表。该库参考了Echarts的配色风格,提供了丰富的图表类型和动态更新功能。
功能特性
- 丰富的图表类型:支持柱状图、折线图、饼图、散点图、雷达图、树型图、旭日图、箱形图、热力图、地图、桑基图、漏斗图、仪表盘等13种图表类型
- Echarts风格配色:采用了Echarts图表库的配色方案,使图表更加美观
- 动态更新:支持图表的动态数据更新,可设置更新间隔
- 响应式设计:图表会根据窗口大小自动调整
- 简单易用的API:提供简洁明了的接口,方便用户快速上手
安装说明
WitTkChart是一个纯Python库,仅依赖于Python标准库中的tkinter模块,因此不需要安装额外的第三方库。
- 确保您的Python环境已安装(推荐Python 3.6或更高版本)
- 克隆或下载WitTkChart仓库
- 将wittkchart.py文件复制到您的项目目录中
快速开始
以下是一个简单的示例,展示如何使用WitTkChart创建一个柱状图:
from wittkchart import WitTkChart# 创建图表数据
data = [65, 59, 80, 81, 56, 55, 72]
categories = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']# 创建并显示图表
chart = WitTkChart(chart_type='bar', data=data, categories=categories,title='一周销售额统计'
)
chart.start()
图表类型
WitTkChart支持以下13种图表类型:
图表类型 | 类型代码 | 描述 |
---|---|---|
柱状图 | bar | 通过条形长度来表现数据大小,适用于分类数据比较 |
折线图 | line | 展示数据的变化趋势,适用于时间序列数据 |
饼图 | pie | 展示数据的占比关系,适用于部分与整体的关系 |
散点图 | scatter | 展示两个变量之间的关系,适用于分布分析 |
雷达图 | radar | 展示多维数据,适用于多维度比较 |
树型图 | tree | 展示层级结构数据,适用于组织架构等 |
旭日图 | sunburst | 多层环形图,适用于层级数据占比分析 |
箱形图 | boxplot | 展示数据分布特征,适用于统计分析 |
热力图 | heatmap | 通过颜色深浅表示数据大小,适用于矩阵数据 |
地图 | map | 展示地理数据分布,适用于区域数据可视化 |
桑基图 | sankey | 展示数据流向和流量,适用于流程分析 |
漏斗图 | funnel | 展示数据转换情况,适用于转化率分析 |
仪表盘 | gauge | 展示单个数据指标,适用于进度展示 |
API参考
WitTkChart类
WitTkChart是库的主要类,用于创建和管理图表。
初始化参数
root
: tkinter根窗口,默认为None,此时会创建一个新窗口width
: 图表宽度,默认为800height
: 图表高度,默认为600chart_type
: 图表类型,默认为’bar’data
: 图表数据,默认为Nonecategories
: 数据分类标签,默认为Nonetitle
: 图表标题,默认为’图表标题’
主要方法
-
set_data(data, categories=None)
: 设置图表数据data
: 新的图表数据categories
: 新的数据分类标签,默认为None
-
set_chart_type(chart_type)
: 设置图表类型chart_type
: 新的图表类型
-
set_title(title)
: 设置图表标题title
: 新的图表标题
-
enable_dynamic_update(interval=1000)
: 启用图表动态更新功能interval
: 更新间隔(毫秒),默认为1000毫秒
-
disable_dynamic_update()
: 禁用图表动态更新功能 -
start()
: 启动图表应用的主循环
示例应用
WitTkChart提供了一个演示应用,展示了如何使用各种图表类型和功能:
python demo.py
演示应用包含两个部分:
- 基础图表演示:允许用户选择不同的图表类型,启用/禁用动态更新,以及更新和重置数据
- 多图表对比演示:同时展示多个不同类型的图表,方便对比分析
图表数据格式
不同类型的图表需要不同格式的数据:
- 柱状图、折线图、树型图、旭日图、漏斗图:一维数组,如
[65, 59, 80, 81, 56]
- 饼图:一维数组,如
[35, 25, 20, 15, 5]
- 散点图:二维数组或元组列表,如
[(10, 20), (30, 40), (50, 60)]
- 雷达图:一维数组,需要与categories长度匹配
- 箱形图:二维数组,每个子数组包含
[min, q1, median, q3, max]
- 热力图:二维数组,表示矩阵数据
- 地图、桑基图:简化实现,接受一维数组
- 仪表盘:包含单个数值的数组,如
[68]
动态更新
WitTkChart支持图表的动态更新,可以通过以下方式启用:
# 启用动态更新,每1000毫秒更新一次
chart.enable_dynamic_update(1000)# 禁用动态更新
chart.disable_dynamic_update()
在实际应用中,您可能需要自定义动态更新的数据来源和逻辑,可以继承WitTkChart类并重写_dynamic_update
方法。
自定义样式
虽然WitTkChart已经内置了Echarts风格的配色方案,但您也可以通过修改colors
属性来自定义图表颜色:
# 自定义颜色
chart.colors = ['#FF0000', '#00FF00', '#0000FF', '#FFFF00', '#FF00FF']
# 重新绘制图表以应用新的颜色
chart.draw_chart()
注意事项
- 部分图表类型(如地图、桑基图)在当前版本中是简化实现,如果需要更复杂的功能,可能需要进一步开发
- 图表的动态更新功能目前使用随机数据波动作为示例,实际应用中应替换为真实的数据来源
- 为了获得最佳显示效果,建议为不同类型的图表提供合适格式和范围的数据
许可证
WitTkChart是一个开源项目,使用MIT许可证。
贡献
欢迎对WitTkChart项目进行贡献,您可以通过以下方式参与:
- 报告bug或提出功能建议
- 改进代码质量或性能
- 添加新的图表类型或功能
- 完善文档和示例
联系
如果您有任何问题、建议或贡献,请联系我们:
- 邮箱: forwt@qq.com,1346363063@qq.com
- 项目仓库: https://gitee.com/WitOpenSource/wit-tk-chart