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调用Moxa PCOMM Lite通过串口Ymodem协议实现发送文件
Aug 15 Python
python连接远程ftp服务器并列出目录下文件的方法
Apr 01 Python
Python计算字符宽度的方法
Jun 14 Python
Python实现文件内容批量追加的方法示例
Aug 29 Python
Python使用wxPython实现计算器
Jan 30 Python
基于python requests库中的代理实例讲解
May 07 Python
对DJango视图(views)和模版(templates)的使用详解
Jul 17 Python
django数据模型on_delete, db_constraint的使用详解
Dec 24 Python
python和js交互调用的方法
Jun 23 Python
Django创建一个后台的基本步骤记录
Oct 02 Python
Python Flask搭建yolov3目标检测系统详解流程
Nov 07 Python
Python语言内置数据类型
Feb 24 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
在mysql数据库原有字段后增加新内容
2009/11/26 PHP
PHP 输出URL的快捷方式示例代码
2013/09/22 PHP
非常重要的php正则表达式详解
2016/01/04 PHP
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
2016/12/14 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
PDO::lastInsertId讲解
2019/01/29 PHP
获取鼠标在div中的相对位置的实现代码
2013/12/30 Javascript
jquery查找父元素、子元素(个人经验总结)
2014/04/09 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
php输出全部gb2312编码内的汉字方法
2017/03/04 Javascript
Vuejs 组件——props数据传递的实例代码
2017/03/07 Javascript
Node.js实现文件上传的示例
2017/06/28 Javascript
jQuery取得元素标签名称小结(附代码)
2017/08/16 jQuery
微信小程序获取手机系统信息的方法【附源码下载】
2017/12/07 Javascript
VSCode 添加自定义注释的方法(附带红色警戒经典注释风格)
2020/08/27 Javascript
vue Cli 环境删除与重装教程 - 版本文档
2020/09/11 Javascript
[01:36:57]【09DOTA2第一视角】小骷髅
2014/04/16 DOTA
[43:57]LGD vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:34]DOTA2 7.22版本新增神杖效果一览(敏捷英雄篇)
2019/05/28 DOTA
[01:10]DOTA2英雄背景故事第四期之混沌法则混沌骑士
2020/07/16 DOTA
详解python的webrtc库实现语音端点检测
2017/05/31 Python
Python中摘要算法MD5,SHA1简介及应用实例代码
2018/01/09 Python
Python使用xlwt模块操作Excel的方法详解
2018/03/27 Python
python邮件发送smtplib使用详解
2020/06/16 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
python同时替换多个字符串方法示例
2019/09/17 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
2020/05/20 Python
美国内衣品牌:Leonisa
2016/08/14 全球购物
稀有和绝版书籍:Biblio.com
2017/02/02 全球购物
JD Sports法国:英国篮球和运动时尚的领导者
2017/09/28 全球购物
支教自我鉴定
2014/01/18 职场文书
国庆节促销广告语2014
2014/09/19 职场文书
十一国庆节“向国旗敬礼”主题班会活动方案
2014/09/27 职场文书
民间借贷纠纷案件代理词
2015/05/26 职场文书
基层工作经历证明
2015/06/19 职场文书