python用Pygal如何生成漂亮的SVG图像详解


Posted in Python onFebruary 10, 2017

前言

SVG可以算是目前最最火热的图像文件格式了,它的英文全称为Scalable Vector Graphics,意思为可缩放的矢量图形。它是基于XML(Extensible Markup Language),由World Wide Web Consortium(W3C)联盟进行开发的。严格来说应该是一种开放标准的矢量图形语言,可让你设计激动人心的、高分辨率的Web图形页面。用户可以直接用代码来描绘图像,可以用任何文字处理工具打开SVG图像,通过改变部分代码来使图像具有交互功能,并可以随时插入到HTML中通过浏览器来观看。

First Head in Pygal

首先安装 pygal 啦:

pip install pygal

如果你要把生成格式设为除了 svg 之外的格式,如 png,jpg 之类,就要安装底下几个库了:

pip install lxml

在 Ubuntu 中按照如下提示安装即可:

sudo apt-get install libxml2-dev libxslt1-dev python-dev
sudo apt-get install python-lxml
pip install cairosvg

安装该库原理同上:

sudo apt-get install python-cairosvg

如下两个库,只需正常 pip 安装即可:

pip install tinycss

pip install cssselect

Hello SVG

import pygal              
bar_chart = pygal.Bar()           
bar_chart.add('Fibonacci', [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55]) 
bar_chart.render_to_file('Hello.svg')

生成的是黑色的 Hello.svg 文件,因为是 svg 格式的,一般的话直接是不能打开的,选择默认的浏览器打开吧,看到就是底下这个样子:

python用Pygal如何生成漂亮的SVG图像详解

更加炫酷点的图:

import pygal
line_chart = pygal.Line()
line_chart.title = 'Browser usage evolution (in %)'
line_chart.x_labels = map(str, range(2002, 2013))
line_chart.add('Firefox', [None, None, 0, 16.6, 25, 31, 36.4, 45.5, 46.3, 42.8, 37.1])
line_chart.add('Chrome', [None, None, None, None, None, None, 0, 3.9, 10.8, 23.8, 35.3])
line_chart.add('IE',  [85.8, 84.6, 84.7, 74.5, 66, 58.6, 54.7, 44.8, 36.2, 26.6, 20.1])
line_chart.add('Others', [14.2, 15.4, 15.3, 8.9, 9, 10.4, 8.9, 5.8, 6.7, 6.8, 7.5])
line_chart.render_to_file('Hello_line_chart.svg')

生成的图就是下面这个样子:

python用Pygal如何生成漂亮的SVG图像详解

Hello PNG

有时候,我们不需要 svg,只需要 png 格式的图表,没关系,pygal 也能够做到:

import pygal
bar_chart = pygal.Bar()
bar_chart.add('Fibonacci', [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55])
bar_chart.render_to_file('bar_chart.svg')
# 生成 png 格式图表
bar_chart.render_to_png(filename='bar_chart.png')

注意绿色的标示,成功生成 png 格式的图片啦:

python用Pygal如何生成漂亮的SVG图像详解

Hello Flask and Pygal

让 Pygal 生成的 svg 格式图片中,显示在你的网页上呗,我们选择 flask 来提供 web 支持:

pip install flask

核心代码如下,没错就是这么短:

import pygal
from flask import Flask, Response

app = Flask(__name__)

@app.route('/')
def index():
 return 
"""
 <html>
 <body>
  <h1>hello pygal and flask</h1>
  <figure>
  <embed type="image/svg+xml" src="/hellosvg/" />
  </figure>
 </body>
 </html>'
"""

@app.route('/hellosvg/')
def graph():
 """ render svg graph """
 bar_chart = pygal.Bar()
 bar_chart.add('Fibonacci', [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55])
 return Response(response=bar_chart.render(), content_type='image/svg+xml')

if __name__ == '__main__':
 app.run()

打开 127.0.0.1:5000 就能看到下面的样子咯:

python用Pygal如何生成漂亮的SVG图像详解

当然咯,你还可以做出如下更为炫酷的 svg 图像,不过这一切都是 pygal 的用法啦:

python用Pygal如何生成漂亮的SVG图像详解

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果想学习更多内容还请移步 pygal 官方文档吧。希望本文的内容对大家能有一定的帮助。

Python 相关文章推荐
利用python模拟sql语句对员工表格进行增删改查
Jul 05 Python
Python实现将Excel转换为json的方法示例
Aug 05 Python
python中将函数赋值给变量时需要注意的一些问题
Aug 18 Python
Python实现求一个集合所有子集的示例
May 04 Python
Python如何获得百度统计API的数据并发送邮件示例代码
Jan 27 Python
使用python绘制二元函数图像的实例
Feb 12 Python
python 通过可变参数计算n个数的乘积方法
Jun 13 Python
python pygame实现球球大作战
Nov 25 Python
深入浅析python的第三方库pandas
Feb 13 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
Aug 26 Python
python 遍历磁盘目录的三种方法
Apr 02 Python
python实现自定义日志的具体方法
May 28 Python
Ubuntu下创建虚拟独立的Python环境全过程
Feb 10 #Python
简单谈谈Python中的几种常见的数据类型
Feb 10 #Python
Python使用QQ邮箱发送Email的方法实例
Feb 09 #Python
python3中bytes和string之间的互相转换
Feb 09 #Python
python实现下载文件的三种方法
Feb 09 #Python
Python如何实现守护进程的方法示例
Feb 08 #Python
详解Python中表达式i += x与i = i + x是否等价
Feb 08 #Python
You might like
与数据库连接
2006/10/09 PHP
PHP+MySQL 制作简单的留言本
2009/11/02 PHP
php foreach 使用&amp;(与运算符)引用赋值要注意的问题
2010/02/16 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
php实现的mongodb操作类实例
2015/04/03 PHP
PHP实现简单爬虫的方法
2015/07/29 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
JS解密入门 最终变量劫持
2008/06/25 Javascript
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
javascript Array.prototype.slice的使用示例
2013/11/14 Javascript
jquery 操作css样式、位置、尺寸方法汇总
2014/11/28 Javascript
js实现数字每三位加逗号的方法
2015/02/05 Javascript
删除javascript所创建子节点的方法
2015/05/21 Javascript
JS对HTML表格进行增删改操作
2016/08/22 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
2018/03/08 Javascript
原生javascript实现连连看游戏
2019/01/03 Javascript
vue移动端弹起蒙层滑动禁止底部滑动操作
2020/07/22 Javascript
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
[55:26]DOTA2-DPC中国联赛 正赛 Aster vs LBZS BO3 第一场 2月23日
2021/03/11 DOTA
python实现文本界面网络聊天室
2018/12/12 Python
python实现词法分析器
2019/01/31 Python
python nmap实现端口扫描器教程
2020/05/28 Python
零基础学Python之前需要学c语言吗
2020/07/21 Python
pycharm专业版远程登录服务器的详细教程
2020/09/15 Python
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
编辑找工作求职信范文
2013/12/16 职场文书
医药专业应届毕业生求职信范文
2014/01/01 职场文书
酒店销售主管岗位职责
2014/01/04 职场文书
考试不及格检讨书
2014/01/09 职场文书
企业开业庆典答谢词
2015/01/20 职场文书
MySQL sql_mode修改不生效的原因及解决
2021/05/07 MySQL
Javascript中async与await的捕捉错误详解
2022/03/03 Javascript
Java 多线程协作作业之信号同步
2022/05/11 Java/Android