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获取文件版本信息、公司名和产品名的方法
Oct 05 Python
Python通过poll实现异步IO的方法
Jun 04 Python
Python实例一个类背后发生了什么
Feb 09 Python
深入理解python函数递归和生成器
Jun 06 Python
详解python发送各类邮件的主要方法
Dec 22 Python
Python 从一个文件中调用另一个文件的类方法
Jan 10 Python
pandas实现将dataframe满足某一条件的值选出
Jun 12 Python
python 使用pdfminer3k 读取PDF文档的例子
Aug 27 Python
python程序中的线程操作 concurrent模块使用详解
Sep 23 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
Feb 11 Python
python随机模块random使用方法详解
Feb 14 Python
Python Sqlalchemy如何实现select for update
Oct 12 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 Socket写的POP3类
2013/10/30 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
PHP写API输出的时用echo的原因详解
2019/04/28 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
JS trim去空格的最佳实践
2011/10/30 Javascript
javascript工具库代码
2012/03/29 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
js实现仿百度汽车频道选择汽车图片展示实例
2015/05/06 Javascript
详细解读JavaScript的跨浏览器事件处理
2015/08/12 Javascript
json+jQuery实现的无限级树形菜单效果代码
2015/08/27 Javascript
10分钟掌握XML、JSON及其解析
2020/12/06 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
2017/07/27 Javascript
vue iView 上传组件之手动上传功能
2018/03/16 Javascript
详解离线安装npm包的几种方法
2018/11/25 Javascript
JS实现json数组排序操作实例分析
2019/10/28 Javascript
[00:30]明星选手化身超级英雄!2018DOTA2亚洲邀请赛全明星赛来临!
2018/04/06 DOTA
使用python的chardet库获得文件编码并修改编码
2014/01/22 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
2015/04/16 Python
简述Python中的进程、线程、协程
2016/03/18 Python
简单谈谈python中的语句和语法
2017/08/10 Python
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
idea创建springMVC框架和配置小文件的教程图解
2018/09/18 Python
详解python运行三种方式
2019/05/13 Python
Python 3.8新特征之asyncio REPL
2019/05/28 Python
Python sql注入 过滤字符串的非法字符实例
2020/04/03 Python
pycharm 使用anaconda为默认环境的操作
2021/02/05 Python
爱尔兰旅游网站:ebookers.ie
2020/01/24 全球购物
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
小学家长评语大全
2014/04/16 职场文书
保险专业求职信
2014/07/07 职场文书
地方课程教学计划
2015/01/19 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
活动费用申请报告
2015/05/15 职场文书
元旦晚会开场白
2015/05/29 职场文书
安全责任协议书范本
2016/03/23 职场文书