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在windows下实现备份程序实例
Jul 04 Python
为Python的Tornado框架配置使用Jinja2模板引擎的方法
Jun 30 Python
Python生成数字图片代码分享
Oct 31 Python
Python实现图片拼接的代码
Jul 02 Python
用Python解决x的n次方问题
Feb 08 Python
python SVM 线性分类模型的实现
Jul 19 Python
Django--权限Permissions的例子
Aug 28 Python
python logging.basicConfig不生效的原因及解决
Feb 20 Python
Python字符串hashlib加密模块使用案例
Mar 10 Python
python Matplotlib模块的使用
Sep 16 Python
记录一下scrapy中settings的一些配置小结
Sep 28 Python
Python字典取键、值对的方法步骤
Sep 30 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与已存在的Java应用程序集成
2006/10/09 PHP
汉字转化为拼音(php版)
2006/10/09 PHP
在PHP中执行系统外部命令
2006/10/09 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
php实现encode64编码类实例
2015/03/24 PHP
PHP实现的装箱算法示例
2018/06/23 PHP
详解关于php的xdebug配置(编辑器vscode)
2019/01/29 PHP
解决thinkPHP 5 nginx 部署时,只跳转首页的问题
2019/10/16 PHP
tp5.1 框架路由操作-URL生成实例分析
2020/05/26 PHP
javascript面向对象入门基础详细介绍
2012/09/05 Javascript
javascript异步处理工作机制详解
2015/04/13 Javascript
js实现仿京东2级菜单效果(带延时功能)
2015/08/27 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
jQuery实现拖动剪裁图片作为头像
2016/12/28 Javascript
Html5+jQuery+CSS制作相册小记录
2016/12/30 Javascript
Angularjs单选改为多选的开发过程及问题解析
2017/02/17 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
Electron 调用命令行(cmd)
2019/09/23 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
JavaScript实现轮播图特效
2020/04/10 Javascript
详解python分布式进程
2018/10/08 Python
python构建基础的爬虫教学
2018/12/23 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
2019/04/27 Python
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
CSS3实现文字描边的2种方法(小结)
2020/02/14 HTML / CSS
数控加工专业毕业生自荐信
2013/09/27 职场文书
秋季运动会活动方案
2014/02/05 职场文书
学生干部培训方案
2014/06/12 职场文书
高中生学习计划书
2014/09/15 职场文书
2014年反洗钱工作总结
2014/11/22 职场文书
城管个人总结
2015/02/28 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
学生会主席任命书
2015/09/21 职场文书
2019年暑期安全广播稿!
2019/07/03 职场文书
简单总结SpringMVC拦截器的使用方法
2021/06/28 Java/Android
讨论nginx location 顺序问题
2022/05/30 Servers