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的web框架编写MVC配置来使其运行的教程
Apr 30 Python
Python:Scrapy框架中Item Pipeline组件使用详解
Dec 27 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
Mar 23 Python
Tensorflow中的placeholder和feed_dict的使用
Jul 09 Python
解决pandas .to_excel不覆盖已有sheet的问题
Dec 10 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
Jun 19 Python
利用Python产生加密表和解密表的实现方法
Oct 15 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
Feb 12 Python
PythonPC客户端自动化实现原理(pywinauto)
May 28 Python
Django之腾讯云短信的实现
Jun 12 Python
Python使用itcaht库实现微信自动收发消息功能
Jul 13 Python
pandas apply多线程实现代码
Aug 17 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
2021年最新CPU天梯图
2021/03/04 数码科技
Swoole-1.7.22 版本已发布,修复PHP7相关问题
2015/12/31 PHP
php处理复杂xml数据示例
2016/07/11 PHP
php中strtotime函数性能分析
2016/11/20 PHP
Yii2 加载css、js 载静态资源的方法
2017/03/10 PHP
Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证操作
2017/06/30 PHP
tp5.1 实现setInc字段自动加1
2019/10/18 PHP
使弱类型的语言JavaScript变强势
2009/06/22 Javascript
从JQuery源码分析JavaScript函数的apply方法与call方法
2014/09/25 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
JS简单实现仿百度控制台输出信息效果
2016/09/04 Javascript
微信小程序开发实战教程之手势解锁
2016/11/18 Javascript
完美实现js选项卡切换效果(一)
2017/03/08 Javascript
js中less常用的方法小结
2017/08/09 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
2018/08/31 Javascript
微信小程序实现留言板
2018/10/31 Javascript
微信小程序实现下拉菜单切换效果
2020/03/30 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
2021/01/26 Vue.js
python实现抖音点赞功能
2019/04/07 Python
python爬虫基础教程:requests库(二)代码实例
2019/04/09 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
django Admin文档生成器使用详解
2019/07/22 Python
Python实现二叉树的最小深度的两种方法
2019/09/30 Python
基于python实现生成指定大小txt文档
2020/07/20 Python
详解Python 函数参数的拆解
2020/09/02 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
Clarins娇韵诗英国官网:来自法国的天然护肤品牌
2017/04/18 全球购物
澳大利亚领先的男装零售连锁店:Lowes
2020/08/07 全球购物
初中音乐教学反思
2014/01/12 职场文书
劳动竞赛活动方案
2014/02/20 职场文书
后勤部经理岗位职责
2014/02/23 职场文书
消防宣传口号
2014/06/16 职场文书
八项规定对照检查材料
2014/08/31 职场文书
离婚协议书标准格式
2014/10/04 职场文书
同意迁入证明模板
2014/10/26 职场文书