Pygal 中的图表

发布日期:2026-07-10 00:08:04   来源 : 杭州电子商务研究院    浏览量 :6
杭州电子商务研究院 发布日期:2026-07-10 00:08:04  
6

介绍

Pygal是一个 Python API,它使我们能够构建各种样式的 SVG(标量矢量图形)图形和图表。在本指南中,我们将学习如何使用 pygal 应用不同的方法以交互和动态的方式可视化数据。我们还将了解如何使用pygal 的pygal_maps_world包和自定义样式的属性在地图中绘图。

关于 Pygal

Pygal 可高度定制,但又极其简单,这是一种罕见的组合。我们可以创建折线图、条形图、直方图、饼图、地图等等。从那里,我们可以进一步定制图表的外观和感觉。

Pygal 的优势

  • 它专门创建 SVG。
  • 我们可以轻松地将 pygal 与 flask 和 Django/Flask 应用程序集成。
  • 为了保持包的大小合理,三个地图包被分开保存。
  • 我们可以使用pygal 中的pygal.style自定义图表。

安装Pygal

安装 pygal 不需要依赖任何软件。它适用于 Python 2.7+,前提是您的系统中安装了 Python 和 pip。

  • pip install:要使用pip安装,请打开终端并运行以下命令:
      pip install pygal
    
  • conda 安装:要使用conda安装,请打开终端并运行以下命令:
      conda install -c conda-forge pygal
    

Pygal 中的图表

我假设您具有 Python 的基本知识,已在系统上安装了 Python 3,并且拥有 Web 浏览器。我们将了解如何创建以下每个图表:

  • 线图
  • 条形图
  • 饼图
  • 地图
  • 定制图表

线图

基本示例

我们将取一些随机数据并研究如何绘制这些数据。

      #importing pygal
import pygal
# creating line chart object
line_chart = pygal.Line()
# naming the title
line_chart.title = 'A vs B vs C vs D'
# set  the range of plot
line_chart.x_labels = map(str, range(0, 20))
# adding lines
line_chart.add('A', [None, None,0, 1, 1, 2, 3, 5, None, 13, 21, 34, 55])
line_chart.add('B',  [None, None, None,10, 0, 2, 5,None, 0,  3.9, 10.8, 3.8, 5.3])
line_chart.add('C',      [1, 1, 1, 2, 2, 3, 4, 5, 7, 9, 12, 5.7, 4.8, 6.2, 6.6, 0.1])
line_chart.add('D',  [9.2, 19.4, 15.3,  8.9,None,    9, 10.4,  10,  5.8,  6.7,  6.8,  7.5])
# rendering the file
line_chart.render_to_file('basic_line_chart.svg')
    

渲染后的文件将保存在当前目录中。

水平线

我们将水平绘制上例中的相同数据。

      # importing pygal
import pygal
# creating horizontal line chart object
line_chart = pygal.HorizontalLine()
# add title
line_chart.title = 'A vs B vs C vs D'
line_chart.x_labels = map(str, range(0, 20))
line_chart.add('A', [None, None,0, 1, 1, 2, 3, 5, None, 13, 21, 34, 55])
line_chart.add('B',  [None, None, None,10, 0, 2, 5,None, 0,  3.9, 10.8, 3.8, 5.3])
line_chart.add('C',      [1, 1, 1, 2, 2, 3, 4, 5, 7, 9, 12, 5.7, 4.8, 6.2, 6.6, 0.1])
line_chart.add('D',  [9.2, 19.4, 15.3,  8.9,None,    9, 10.4,  10,  5.8,  6.7,  6.8,  7.5])
# rendering file
line_chart.render_to_file('horizontal_line_chart.svg')
    

堆积折线图。

      # importing pygal
import pygal
# creating horizontal line chart object
line_chart = pygal.StackedLine(fill=True)
# add title
line_chart.title = 'A vs B vs C vs D'
line_chart.x_labels = map(str, range(0, 20))
line_chart.add('A', [None, None,0, 1, 1, 2, 3, 5, None, 13, 21, 34, 55])
line_chart.add('B',  [None, None, None,10, 0, 2, 5,None, 0,  3.9, 10.8, 3.8, 5.3])
line_chart.add('C',      [1, 1, 1, 2, 2, 3, 4, 5, 7, 9, 12, 5.7, 4.8, 6.2, 6.6, 0.1])
line_chart.add('D',  [9.2, 19.4, 15.3,  8.9,None,    9, 10.4,  10,  5.8,  6.7,  6.8,  7.5])
# rendering file
line_chart.render_to_file('stacked_line_chart.svg')
    

条形图

基本示例

      # First import pygal
import pygal
# Then create a bar graph object
bar_chart = pygal.Bar()
# Add some values
bar_chart.add('Sequence Series', [0, 2, 4, 6, 8, 5, 6, 7, 21, 34, 55])
# save the svgs
bar_chart.render_in_browser()
    

注意:你也可以使用render_in_browser命令直接在浏览器中渲染 SVG 。如果你使用Jupyter notebook,它会变得很有建设性。

堆积条形图

在此示例中,我们将研究如何使用多个系列创建堆积条形图。

      # First import pygal
import pygal
# Then create a bar graph object
bar_chart = pygal.Bar()
# Then create a bar graph
bar_chart = pygal.StackedBar()
# adding random values
bar_chart.add('Series A', [0, 50, 1, 2, 3, 5, 8, 3, 1, 44, 5])
bar_chart.add('Series B', [1, 4, 1, 5, 2, 7, 4, 5, 7, 9, 8])
# this will render the svgs in browser
bar_chart.render_to_file('stacked_bar_chart.svg')
    

水平多系列条形图

      # First import pygal
import pygal
# Then create a bar graph object
bar_chart = pygal.Bar()
# Then create a bar graph
line_chart = pygal.HorizontalBar()
line_chart.title = 'Random data'
line_chart.add('A', 20.5)
line_chart.add('B', 36.7)
line_chart.add('C', 6.3)
line_chart.add('D', 4.5)
line_chart.add('E', 80.3)
# rendering the file
line_chart.render_to_file('Horizontal_bar_chart.svg')
    

饼图

我们现在将学习如何绘制基本饼图。

基本示例

      # importing pygal
import pygal
# creating pie_chart object
pie_chart = pygal.Pie()
pie_chart.title = 'random data'
# adding random data
pie_chart.add('A', 20.5)
pie_chart.add('B', 36.0)
pie_chart.add('C', 35.9)
pie_chart.add('D', 5.5)
pie_chart.add('E', 1.3)
# rendering the svg to the file
pie_chart.render_to_file('pie_chart.svg')
    

多系列饼图

      #importing pygal
import pygal
# creating pie_chart object
pie_chart = pygal.Pie()
pie_chart.title = 'random data'
# adding random data
pie_chart.add("Series A", [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55])
pie_chart.add("Series C", [0, 1, 1, 2, 3, 7, 5, 10, 20, 32, 35])
pie_chart.add("Series B", [0, 1, 1, 4, 5, 5.5, 7, 12, 26, 24, 45])
# rendering the svgs
pie_chart.render_to_file('multiple_pie_chart.svg')
    

油炸圈饼

      # importing pygal
import pygal
# creating pie_chart object
pie_chart = pygal.Pie(inner_radius=.4)
pie_chart.title = 'random data'
# adding random data
pie_chart.add('A', 20.5)
pie_chart.add('B', 36.0)
pie_chart.add('C', 35.9)
pie_chart.add('D', 5.5)
pie_chart.add('E', 80.3)
# rendering the svg to file
pie_chart.render_to_file('donut_chart.svg')
    

地图

地图现在被分开保存,以保证 pygal 包的大小合理。

pygal 中有三个地图包:

  • 世界地图
  • 法国地图
  • 瑞士地图

我们将使用世界地图包来绘制地图。

安装

在绘图之前,我们必须在系统上安装世界地图包。

  • pip install - To install using pip, open the terminal and run the following command:

    pip install pygal_maps_world
    

Basic Example

      import pygal
# importing World_map package 
from pygal.maps.world import World
# creating object
worldmap_chart = pygal.maps.world.World()
# adding title
worldmap_chart.title = 'Some countries'
# add data
worldmap_chart.add('F countries', ['fr', 'fi'])
worldmap_chart.add('I countries', ['in', 'il','iq'])
worldmap_chart.add('M countries', ['ma', 'mc', 'md', 'me', 'mg',
                                   'mk', 'ml', 'mm', 'mn', 'mo',
                                   'mr', 'mt', 'mu', 'mv', 'mw',
                                   'mx', 'my', 'mz'])
worldmap_chart.add('U countries', ['ua', 'ug', 'us', 'uy', 'uz'])
# rendering the svg to file
worldmap_chart.render_to_file('basic_map.svg')
    

Addi

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据