Pygal 支持各种图表类型,包括折线图、条形图和雷达图。它适合那些想要以最少的配置快速、直接地创建静态图表的用户。
Pygal是一个开源的Python库,用于使用简单直观的语法创建SVG图表。它注重易用性,旨在用最少的代码生成具有视觉吸引力的图表。
Pygal支持各种图表类型,包括折线图、条形图和雷达图。它适合那些想要以最少的配置快速、直接地创建静态图表的用户。

一、核心功能
SVG支持:生成的图表为矢量格式,可无损缩放,适合网页嵌入或高质量打印。丰富的图表类型:支持柱状图、折线图、饼图、散点图、雷达图、仪表盘图、树状图、金字塔图等 14 种以上图表类型。交互性:默认支持鼠标悬停显示数据标签、点击事件等,无需额外代码。个性化定制:可调整颜色、字体、轴标签、柱状图圆角、填充效果等。例如,通过Style类自定义配色二、安装及基本用法
1. 库安装
通过pip进行安装:
pip install pygal
2. 柱状图
此示例中,我们将创建一个显示公司季度销售额的柱状图
import pygalbar = pygal.Bar()bar.title = "销售额统计"bar.x_labels = ['一季度', '二季度', '三季度', '四季度']bar.add('2024年', [100, 200, 300, 400])bar.render_to_file('sales.svg') # 保存为 SVG 文件

3. 饼图
在此示例中,我们首先定义两个列表citys和users,分别包含城市名称及其总人数百分比。 我们创建一个饼图并将图表的标题设置为 "关注人数"。
import pygal# Datacitys = ['北京', '上海', '广州', '长沙', '重庆']users = [30, 25, 20, 15, 10]pie_chart = pygal.Pie()pie_chart.title = "关注人数"for i in range(len(citys)): pie_chart.add(citys[i], users[i]) # Render the chartpie_chart.render_to_file('follow.svg')

4. 仪表盘图(SolidGauge)
gauge = pygal.SolidGauge(half_pie=False, inner_radius=0.7)gauge.title = "任务完成度"gauge.add('进度', 80)gauge.render_to_file('proccess.svg')
参数:
half_pie 是否为半圆inner_raidus 内部半径
5. 雷达图(Radar)
适用于多维数据对比,如学科能力分析:
radar = pygal.Radar(fill=True)radar.x_labels = ['语文', '数学', '英语', '物理', '化学']radar.add('学生A', [90, 85, 95, 80, 75])radar.add('学生B', [85, 90, 95, 85, 75])radar.render_to_file('radar.svg')

三、高级功能
1. 默认悬停与点击交互示例
Pygal生成的SVG图表默认支持 悬停显示数值,无需额外代码。点击事件需结合前端JavaScript实现,但悬停效果开箱即用:
import pygal# 创建柱状图bar = pygal.Bar()bar.title = "产品销量(悬停查看数值)"bar.x_labels = ['苹果', '香蕉', '橘子', '葡萄']bar.add('2024年', [120, 90, 150, 80])bar.render_to_file('hover_demo.svg') # 保存为 SVG# 打开文件查看效果(鼠标悬停在柱子上即可显示数值)import webbrowserwebbrowser.open('hover_demo.svg')
鼠标悬停在柱状图上方时,自动显示对应数值标签(如 120、90 等)

2. 自定义颜色样式(使用 Style 类)
通过pygal.style.Style自定义图表颜色、字体等样式:
from pygal import Barfrom pygal.style import Style# 自定义样式:深色背景 + 渐变柱状图custom_style = Style( background='#2d2d2d', # 背景色 plot_background='#2d2d2d', # 绘图区背景 foreground='#dddddd', # 标签文字颜色 foreground_strnotallow='#ffffff', # 强调文字颜色(如标题) colors=('#ff4444', '#44ff44', '#4444ff'), # 数据序列颜色 opacity=0.8, # 透明度 opacity_hover=1.0, # 悬停时透明度 transitinotallow='400ms ease-out'# 动画过渡效果)# 应用自定义样式bar = Bar(style=custom_style)bar.title = "自定义颜色样式示例"bar.x_labels = ['红色', '绿色', '蓝色']bar.add('系列1', [30, 50, 20])bar.add('系列2', [20, 40, 60])bar.render_to_file('custom_style.svg')
效果:
图表背景为深灰色 (#2d2d2d),文字为浅灰色。数据系列颜色依次为红、绿、蓝,悬停时透明度增强。保存后打开 SVG 文件查看完整效果。
3. 动态修改单个数据点颜色
若需为特定数据点单独着色,可传递颜色数组:
bar = pygal.Bar()bar.add('销量', [ {'value': 120, 'color': '#FF0000'}, # 红色 {'value': 90, 'color': '#00FF00'}, # 绿色 {'value': 150, 'color': '#0000FF'}, # 蓝色 {'value': 80, 'color': '#FFD700'} # 金色])bar.render_to_file('custom_color_points.svg')

