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 05 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
Apr 24 Python
实用自动化运维Python脚本分享
Jun 04 Python
对Tensorflow中的变量初始化函数详解
Jul 27 Python
django DRF图片路径问题的解决方法
Sep 10 Python
PyTorch 1.0 正式版已经发布了
Dec 13 Python
python操作日志的封装方法(两种方法)
May 23 Python
python+jinja2实现接口数据批量生成工具
Aug 28 Python
python获取命令行参数实例方法讲解
Nov 02 Python
python输出国际象棋棋盘的实例分享
Nov 26 Python
python 如何获取页面所有a标签下href的值
May 06 Python
pycharm部署django项目到云服务器的详细流程
Jun 29 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
谏山创故乡大分县日田市水坝将设立《进击的巨人》立艾伦、三笠以及阿尔敏的铜像!
2020/03/06 日漫
PHP开发框架总结收藏
2008/04/24 PHP
邮箱正则表达式实现代码(针对php)
2013/06/21 PHP
PHP实现HTTP断点续传的方法
2015/06/17 PHP
PHP实现的随机IP函数【国内IP段】
2016/07/20 PHP
php strftime函数获取日期时间(switch用法)
2018/05/16 PHP
JavaScript 设计模式之组合模式解析
2010/04/09 Javascript
JQuery浮动DIV提示信息并自动隐藏的代码
2010/08/29 Javascript
jquery实现的一个导航滚动效果具体代码
2013/05/27 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
jQuery中hover与mouseover和mouseout的区别分析
2015/12/24 Javascript
JavaScript代码生成PDF文件的方法
2016/02/26 Javascript
JS获取复选框的值,并传递到后台的实现方法
2016/05/30 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
vue.js实现图书管理功能
2019/09/24 Javascript
Vue 刷新当前路由的实现代码
2019/09/26 Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
2020/02/15 Javascript
python中pycurl库的用法实例
2014/09/30 Python
解决python文件字符串转列表时遇到空行的问题
2017/07/09 Python
python算法与数据结构之单链表的实现代码
2019/06/27 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
2020/05/07 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
2020/07/28 Python
如何完美的建立一个python项目
2020/10/09 Python
一个C/C++编程面试题
2013/11/10 面试题
副总经理岗位职责
2014/03/16 职场文书
毕业生就业推荐表自我鉴定
2014/03/20 职场文书
绿色环保演讲稿
2014/05/10 职场文书
国庆节演讲稿
2014/05/27 职场文书
授权委托书
2014/07/31 职场文书
美术教师个人总结
2015/02/06 职场文书
2015年仓库工作总结
2015/04/09 职场文书
色戒观后感
2015/06/12 职场文书
k8s部署redis cluster集群的实现
2021/06/24 Redis
canvas实现贪食蛇的实践
2022/02/15 Javascript
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技