pygal,一個神奇的 Python 庫
Pygal 是一個開源的 Python 庫,用于使用簡單直觀的語法創(chuàng)建 SVG 圖表。它注重易用性,旨在用最少的代碼生成具有視覺吸引力的圖表。
Pygal 支持各種圖表類型,包括折線圖、條形圖和雷達圖。它適合那些想要以最少的配置快速、直接地創(chuàng)建靜態(tài)圖表的用戶。
一、核心功能
- SVG 支持:生成的圖表為矢量格式,可無損縮放,適合網(wǎng)頁嵌入或高質(zhì)量打印。
- 豐富的圖表類型:支持柱狀圖、折線圖、餅圖、散點圖、雷達圖、儀表盤圖、樹狀圖、金字塔圖等 14 種以上圖表類型。
- 交互性:默認支持鼠標懸停顯示數(shù)據(jù)標簽、點擊事件等,無需額外代碼。
- 個性化定制:可調(diào)整顏色、字體、軸標簽、柱狀圖圓角、填充效果等。例如,通過 Style 類自定義配色
二、安裝及基本用法
1. 庫安裝
通過pip進行安裝:
pip install pygal
2. 柱狀圖
此示例中,我們將創(chuàng)建一個顯示公司季度銷售額的柱狀圖
import pygal
bar = pygal.Bar()
bar.title = "銷售額統(tǒng)計"
bar.x_labels = ['一季度', '二季度', '三季度', '四季度']
bar.add('2023年', [100, 200, 300, 400])
bar.render_to_file('sales.svg') # 保存為 SVG 文件
3. 餅圖
在此示例中,我們首先定義兩個列表 citys 和 users,分別包含城市名稱及其總?cè)藬?shù)百分比。 我們創(chuàng)建一個餅圖并將圖表的標題設(shè)置為 "關(guān)注人數(shù)"。
import pygal
# Data
citys = ['北京', '上海', '廣州', '長沙', '重慶']
users = [30, 25, 20, 15, 10]
pie_chart = pygal.Pie()
pie_chart.title = '關(guān)注人數(shù)'
for i in range(len(citys)):
pie_chart.add(citys[i], users[i])
# Render the chart
pie_chart.render_to_file('follow.svg')
4. 儀表盤圖(SolidGauge)
gauge = pygal.SolidGauge(half_pie=False, inner_radius=0.7)
gauge.title = "任務(wù)完成度"
gauge.add('進度', 80)
gauge.render_to_file('proccess.svg')
參數(shù):
- half_pie 是否為半圓
- inner_raidus 內(nèi)部半徑
5. 雷達圖(Radar)
適用于多維數(shù)據(jù)對比,如學科能力分析:
radar = pygal.Radar(fill=True)
radar.x_labels = ['語文', '數(shù)學', '英語', '物理', '化學']
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 圖表默認支持 懸停顯示數(shù)值,無需額外代碼。點擊事件需結(jié)合前端 JavaScript 實現(xiàn),但懸停效果開箱即用:
import pygal
# 創(chuàng)建柱狀圖
bar = pygal.Bar()
bar.title = "產(chǎn)品銷量(懸停查看數(shù)值)"
bar.x_labels = ['蘋果', '香蕉', '橘子', '葡萄']
bar.add('2023年', [120, 90, 150, 80])
bar.render_to_file('hover_demo.svg') # 保存為 SVG
# 打開文件查看效果(鼠標懸停在柱子上即可顯示數(shù)值)
import webbrowser
webbrowser.open('hover_demo.svg')
鼠標懸停在柱狀圖上方時,自動顯示對應數(shù)值標簽(如 120、90 等)
2. 自定義顏色樣式(使用 Style 類)
通過 pygal.style.Style 自定義圖表顏色、字體等樣式:
from pygal import Bar
from pygal.style import Style
# 自定義樣式:深色背景 + 漸變柱狀圖
custom_style = Style(
background='#2d2d2d', # 背景色
plot_background='#2d2d2d', # 繪圖區(qū)背景
foreground='#dddddd', # 標簽文字顏色
foreground_strnotallow='#ffffff', # 強調(diào)文字顏色(如標題)
colors=('#ff4444', '#44ff44', '#4444ff'), # 數(shù)據(jù)序列顏色
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),文字為淺灰色。
- 數(shù)據(jù)系列顏色依次為紅、綠、藍,懸停時透明度增強。
- 保存后打開 SVG 文件查看完整效果。
3. 動態(tài)修改單個數(shù)據(jù)點顏色
若需為特定數(shù)據(jù)點單獨著色,可傳遞顏色數(shù)組:
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')
四、應用場景
- 數(shù)據(jù)分析:趨勢分析(折線圖)、分布對比(柱狀圖)。
- 教育領(lǐng)域:學生成績雷達圖、學科能力分布。
- 商業(yè)報告:銷售額堆疊柱狀圖、市場份額餅圖。
- 科研可視化:實驗數(shù)據(jù)散點圖、多維數(shù)據(jù)雷達圖。
- 實時儀表盤:結(jié)合 Flask/Django 嵌入網(wǎng)頁,動態(tài)更新數(shù)據(jù)。