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远程桌面协议RDPY安装使用介绍
Apr 15 Python
python 字典中文key处理,读取,比较方法
Jul 06 Python
PyCharm配置mongo插件的方法
Nov 30 Python
Python反爬虫技术之防止IP地址被封杀的讲解
Jan 09 Python
Python使用POP3和SMTP协议收发邮件的示例代码
Apr 16 Python
详解pandas的外部数据导入与常用方法
May 01 Python
python基础 range的用法解析
Aug 23 Python
Python绘制全球疫情变化地图的实例代码
Apr 20 Python
Python unittest单元测试框架实现参数化
Apr 29 Python
django在开发中取消外键约束的实现
May 20 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
Dec 01 Python
Python序列化与反序列化相关知识总结
Jun 08 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
SONY SRF-M100的电路分析
2021/03/02 无线电
用PHP实现验证码功能
2006/10/09 PHP
微信公众平台天气预报功能开发
2014/07/06 PHP
PHP获取数组的键与值方法小结
2015/06/13 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
PHP生成word文档的三种实现方式
2016/11/14 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
2017/06/06 PHP
用Jquery实现多级下拉框无刷新的联动
2010/12/22 Javascript
JS将所有对象s的属性复制给对象r(原生js+jquery)
2014/01/25 Javascript
Javascript基础_嵌入图像的简单实现
2016/06/14 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
2016/10/09 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
给vue项目添加ESLint的详细步骤
2017/09/29 Javascript
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
浅析Vue中拆分视图层代码的5点建议
2019/08/15 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
实践Python的爬虫框架Scrapy来抓取豆瓣电影TOP250
2016/01/20 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
实用自动化运维Python脚本分享
2018/06/04 Python
python自带tkinter库实现棋盘覆盖图形界面
2019/07/17 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
2019/12/11 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
Python Opencv轮廓常用操作代码实例解析
2020/09/01 Python
Python中qutip用法示例详解
2020/10/02 Python
详解python3 GUI刷屏器(附源码)
2021/02/18 Python
Python Spyder 调出缩进对齐线的操作
2021/02/26 Python
CSS3制作翻转效果_动力节点Java学院整理
2017/07/11 HTML / CSS
审计专业自荐信范文
2014/04/21 职场文书
新农村建设标语
2014/06/24 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
2015年秋季小学开学典礼主持词
2015/07/16 职场文书
户外拓展训练感想
2015/08/07 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
小学班主任培训心得体会
2016/01/07 职场文书
Java 语言中Object 类和System 类详解
2021/07/07 Java/Android
spring IOC容器的Bean管理XML自动装配过程
2022/05/30 Java/Android