使用 Pygal 构建可视化

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

介绍

Pygal是一个 Python API,它使我们能够构建各种样式的标量矢量图形 (SVG) 图形和图表。在本指南中,我们将学习如何使用 Pandas 和 Pygal 库的组合从数据集可视化动态和交互式图表。我们将从 Pygal 的基础知识开始,例如如何使用它来应用不同的方法来可视化数据以及不同类型的可视化如何获取其输入数据。然后我们将整合 Pygal 和 Pandas。

有关 Pygal 的更多信息,请阅读我之前的两篇指南:

安装Pygal

安装 Pygal 不需要任何依赖项。它适用于 Python 2.7+。对于本指南,我假设您的系统上安装了 Python 和 pip。

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

Pygal 基础知识

我们将通过多个示例来了解 Pygal 期望的输入数据。核心思想是让 Pandas 以 Pygal 可视化可以轻松使用的格式创建数据

我假设您具有 Python 的基本知识,在您的系统上安装了 Python 3+ 版本,并且有一个 Web 浏览器。

水平条形图

对于基本的条形图,我们必须调用pygal.Horizo​​ntalbar()对象。

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

点状图

对于基本的点图,我们必须调用pygal.Dot()对象。

在这个点图中,您可以看到,对于每个折线图类别(“A”或“B”),我们都需要调用添加函数并提供数据。

      #importing pygal 
import pygal
# creating a object
dot_chart = pygal.Dot(x_label_rotation=30)
# nameing a title
dot_chart.title = 'A vs B vs C vs D'
# namind different labels
dot_chart.x_labels = ['Richards', 'DeltaBlue', 'Crypto', 'RayTrace', 'EarleyBoyer', 'RegExp', 'Splay', 'NavierStokes']
# adding the data
dot_chart.add('A', [6395, 2212, 7520, 7218, 12464, 1660, 2123, 8607])
dot_chart.add('B', [8473, 9099, 1100, 2651, 6361, 1044, 3797, 9450])
dot_chart.add('C', [3472, 2933, 4503, 5229, 5510, 1828, 9013, 4669])
dot_chart.add('D', [43, 41, 59, 79, 144, 136, 34, 102])
# rendering the file 
dot_chart.render_to_file("dot chart.svg")
    

我想现在您已经足够了解不同类型的 Pygal 可视化如何以不同的方式获取数据。

数据

我们在上面的例子中看到了 Pygal 如何以特定格式获取数据,现在我们将以 CSV 数据格式的公共数据集在 Pandas 的帮助下构建 Pygal 可视化。

我假设您已经掌握了Pandas库的基本知识并已将其安装在您的系统上。

这里我有一份 2019 年全球移动操作系统市场份额的数据集。你可以在这里下载。

像往常一样,我们将首先使用 Pandas 加载数据。

      import pandas as pd
data_frame = pd.read_csv("Mobile Operating System Market Share Worldwide.csv")
data_frame.head()
    

现在我们将根据我们想要在 Pygal 中绘制的图表类型来操作或排列这些数据。

使用 Pandas 和 Pygal 制作图表

现在我们将在公共数据集上绘制上述示例,该数据集是使用 Pandas 和 Pygal 获得的。

带有 CSV 数据的折线图

在这张折线图中,我们将比较四种最流行的操作系统:Android、iOS、KaiOS 和三星。

在开始之前,我们必须改变我们想要用于可视化的列的数据类型。

在 Pandas 中,我们可以借助 Pandas 对读取数据时想要使用的列进行类型转换。

      # Importing pandas library.
import pandas as pd 
# Reading and type casting columns in our csv file.
data_frame = pd.read_csv("Mobile Operating System Market Share Worldwide.csv",
                        dtype ={
                            "Date" : str,
                            "Android": float,
                            "iOS": float, 
                            "KaiOS": float, 
                            "Samsung": float
                        })
    

类型转换之后,我们就可以使用数据集进行可视化了。

      # importing pygal library
import pygal
# we will append data in list 
a = []
b = []
c = []
d = []
# creating object
line_chart = pygal.Line()
# naming the title
line_chart.title = 'Android, iOS, KaiOS and Samsung usage in 2019 months wise'
# adding range of months from 1 to 12
line_chart.x_labels = map(str, range(1, 12))
for index,row in data_frame.iterrows():
    a.append(row["Android"])
    b.append(row["iOS"])
    c.append(row["KaiOS"])
    d.append(row["Samsung"])
# adding the     
line_chart.add('Android', a)
line_chart.add('iOS', b)
line_chart.add('KaiOS', c)
line_chart.add('Samsung', d)
# rendering  the file
line_chart.render_to_file("line_chart.svg")
    

堆积折线图

我们无需对数据进行任何处理即可制作堆积折线图。

      # importing pygal library
import pygal
# we will append data in list 
a = []
b = []
c = []
d = []
# creating object
line_chart = pygal.StackedLine(fill=True)
# naming the title
line_chart.title = 'Android, iOS, KaiOS and Samsung usage in 2019 months wise'
# adding range of months from 1 to 12
line_chart.x_labels = map(str, range(1, 12))
for index,row in data_frame.iterrows():
    a.append(row["Android"])
    b.append(row["iOS"])
    c.append(row["KaiOS"])
    d.append(row["Samsung"])
# adding the     
line_chart.add('Android', a)
line_chart.add('iOS', b)
line_chart.add('KaiOS', c)
line_chart.add('Samsung', d)
# rendering  the file
line_chart.render_to_file("Stacked line chart.svg")
    

基本条形图

我们还可以使用上述方法绘制底层条形图。

      # importing pygal library
import pygal
# we will append data in list 
a = []
b = []
c = []
d = []
# creating object
bar_chart = pygal.Bar()
# naming the title
bar_chart.title = 'Android, iOS, KaiOS and Samsung usage in 2019 months wise'
# adding range of months from 1 to 12
bar_chart.x_labels = map(str, range(1, 12))
for index,row in data_frame.iterrows():
    a.append(row["Android"])
    b.append(row["iOS"])
    c.append(row["KaiOS"])
    d.append(row["Samsung"])
# adding the apeended list 
bar_chart.add('Android', a)
bar_chart.add('iOS', b)
bar_chart.add('KaiOS', c)
bar_chart.add('Samsung', d)
# rendering  the file
bar_chart.render_to_file("Basic Bar chart.svg")
    

点状图

对于此图表,我们必须添加标签来识别每个月的数据。

      # importing pygal library
import pygal
# we will append data in list 
a = []
b = []
c = []
d = []
# creating dot chart object
dot_chart = pygal.Dot(x_label_rotation=30)
# naming the titile
dot_chart.title = 'Android, iOS, KaiOS and Samsung usage in 2019 months wise'
dot_chart.x_labels = ['january', 'february', 'March', 'April', 'May', 'June', 'July', 'August', 'October', 'November', 'December']
for index,row in data_frame.iterrows():
    a.append(row["Android"])
    b.append(row["iOS"])
    c.append(row["KaiOS"])
    d.append(row["Samsung"])
# adding the apeended list 
dot_chart.add('Android', a)
dot_chart.add('iOS', b)
dot_chart.add('KaiOS', c)
dot_chart.add('Samsung', d)
# rendering  the file
dot_chart.render_to_file("dots chart.svg")
    

水平条形图

正如我们在上面水平条形图的基本示例中看到的,它采用的数据与折线图对象不同。

首先,我们将再次通过 Pandas 导入 CSV 文件,并使用Pandas 的data_frame.T函数转置我们的数据集。

      # importing pandas 
import pandas as pd
# Reading the Data Frame  
data_frame = pd.read_csv("Mobile Operating System Market Share Worldwide.csv")
# we will transpose the data set
data_frame = data_frame.T
data_frame.head()
    

现在我们将使用 Pandas 的drop()函数删除日期行

      data_frame.drop(['Date'])
    

可以看到第一列没有显示名称,我们将保存并再次读取保存的文件。

      data_frame.to_csv(r'Os market share world wide.csv')
data_frame = pd.read_csv("Os market share world wide.csv")
data_frame
    

如您所见,保存并重新读取后,Pandas 也自动索引了行。

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