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中何种情况下需要使用断言
Apr 01 Python
Python实现快速排序算法及去重的快速排序的简单示例
Jun 26 Python
Django实现自定义404,500页面教程
Mar 26 Python
Python升级导致yum、pip报错的解决方法
Sep 06 Python
解决python删除文件的权限错误问题
Apr 24 Python
Python unittest 简单实现参数化的方法
Nov 30 Python
Python绘图Matplotlib之坐标轴及刻度总结
Jun 28 Python
利用Python脚本实现自动刷网课
Feb 03 Python
Python使用monkey.patch_all()解决协程阻塞问题
Apr 15 Python
django queryset相加和筛选教程
May 18 Python
python speech模块的使用方法
Sep 09 Python
python四种出行路线规划的实现
Jun 23 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 404错误页面实现代码
2009/06/22 PHP
php判断ip黑名单程序代码实例
2014/02/24 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
2014/10/14 PHP
PHP curl使用实例
2015/07/02 PHP
PHP函数rtrim()使用中的怪异现象分析
2017/02/24 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
php在linux环境中如何使用redis详解
2020/12/15 PHP
JavaScript实现将UPC转换成ISBN的方法
2015/05/26 Javascript
jQuery对html元素的取值与赋值实例详解
2015/12/18 Javascript
JavaScript实现点击按钮字体放大、缩小
2016/02/29 Javascript
BootStrap智能表单实战系列(四)表单布局介绍
2016/06/13 Javascript
AngularJS 中文API参考手册
2016/07/28 Javascript
完美的js div拖拽实例代码
2016/09/24 Javascript
Bootstrap CSS组件之导航(nav)
2016/12/17 Javascript
浅谈javascript中的数据类型转换
2016/12/27 Javascript
Vue.js系列之项目结构说明(2)
2017/01/03 Javascript
vue.js使用代理和使用Nginx来解决跨域的问题
2018/02/03 Javascript
webpack css加载和图片加载的方法示例
2018/09/11 Javascript
vue实现鼠标移入移出事件代码实例
2019/03/27 Javascript
在react中使用vue的状态管理的方法示例
2020/05/02 Javascript
jquery绑定事件 bind和on的用法与区别分析
2020/05/22 jQuery
JavaScript实现筛选数组
2021/03/02 Javascript
Python中的__SLOTS__属性使用示例
2015/02/18 Python
实例讲解Python爬取网页数据
2018/07/08 Python
浅谈关于Python3中venv虚拟环境
2018/08/01 Python
python之线程通过信号pyqtSignal刷新ui的方法
2019/01/11 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
大二学生职业生涯规划书
2014/02/05 职场文书
大学生职业生涯规划书汇总
2014/03/20 职场文书
校园安全标语
2014/06/07 职场文书
副主任竞聘演讲稿
2014/08/18 职场文书
2014年环保局工作总结
2014/12/11 职场文书
农民工工资保障承诺书
2015/05/04 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
征求意见函
2015/06/05 职场文书
Python提取PDF指定内容并生成新文件
2021/06/09 Python