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中实现定制类的特殊方法总结
Sep 28 Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
Aug 16 Python
Python的Flask框架应用调用Redis队列数据的方法
Jun 06 Python
在Python web中实现验证码图片代码分享
Nov 09 Python
python实现读取excel写入mysql的小工具详解
Nov 20 Python
python学习之matplotlib绘制散点图实例
Dec 09 Python
python 实现在txt指定行追加文本的方法
Apr 29 Python
Jupyter中直接显示Matplotlib的图形方法
May 24 Python
ubuntu 16.04下python版本切换的方法
Jun 14 Python
python传到前端的数据,双引号被转义的问题
Apr 03 Python
Python装饰器的练习题
Nov 23 Python
Python开发五子棋小游戏
May 02 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
PHP 观察者模式的实现代码
2013/05/10 PHP
浅析php工厂模式
2014/11/25 PHP
laravel5创建service provider和facade的方法详解
2016/07/26 PHP
PHP房贷计算器实例代码,等额本息,等额本金
2017/04/01 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
Laravel5框架添加自定义辅助函数的方法
2018/08/01 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
2019/06/03 PHP
jQuery插件开发基础简单介绍
2013/01/07 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
2015/07/17 Javascript
jQuery动画效果相关方法实例分析
2015/12/31 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
nodejs结合Socket.IO实现的即时通讯功能详解
2018/01/12 NodeJs
vue基础知识--axios合并请求和slot
2020/06/04 Javascript
vue使用require.context实现动态注册路由
2020/12/25 Vue.js
Python本地与全局命名空间用法实例
2015/06/16 Python
Python实例一个类背后发生了什么
2016/02/09 Python
Python对文件操作知识汇总
2016/05/15 Python
python运行时间的几种方法
2016/06/17 Python
python requests 使用快速入门
2017/08/31 Python
python操作mysql代码总结
2018/06/01 Python
Django  ORM 练习题及答案
2019/07/19 Python
Python使用matplotlib 画矩形的三种方式分析
2019/10/31 Python
Python序列类型的打包和解包实例
2019/12/21 Python
python3 pathlib库Path类方法总结
2019/12/26 Python
python颜色随机生成器的实例代码
2020/01/10 Python
快速解释如何使用pandas的inplace参数的使用
2020/07/23 Python
python使用requests库爬取拉勾网招聘信息的实现
2020/11/20 Python
用css3实现转换过渡和动画效果
2020/03/13 HTML / CSS
html5音频_动力节点Java学院整理
2018/08/22 HTML / CSS
Sunglasses Shop英国:欧洲领先的太阳镜在线供应商之一
2018/09/19 全球购物
Hotels.com韩国:海外国内旅行所需的酒店和住宿预订网站
2020/05/08 全球购物
小学教师师德承诺书
2014/05/23 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
机动车交通事故协议书
2015/01/29 职场文书
2015年度信用社工作总结
2015/05/04 职场文书
入门学习Go的基本语法
2021/07/07 Golang