这篇文章是作为数据科学博客马拉松的一部分发表的。
在过去的十年中,我们在不同的数据可视化库中工作。数据可视化是通过将数据整理成更简单的情节来讲述故事,帮助我们理解和突出数据中的关键趋势。
简介
一个完善的数据可视化库允许你通过绘制交互式图表和处理你选择的数据集来突出有用的信息。你可以深入挖掘,浏览所有的洞察力,并将不同的图表和图画可视化。
然而,要体验数据可视化的实际好处并为你的项目选择最好的数据可视化,需要大量的研究和实践。这就是为什么我决定向你介绍Pygal。
今天的指南将向你介绍Pygal,它将解释Pygal的重要和有价值的功能。此外,它还会解释你为什么要使用Pygal,它的好处,以及与其他数据可视化库的比较,然后我们将动手在你的系统上实现和安装Pygal库。
然而,写这篇指南的动机是为了向广大受众解释开源社区和软件的惊人表现。我并不打算推广这个或不同的数据可视化库。因此,本指南将给你足够的知识来选择适合自己的最佳答案。
因此,让我们直接进入这个关于Pygal的教程。
什么是Pygal?
Pygal是一个开源的Python数据可视化库。它是最好的Python库之一,可以为不同的数据集创建高度互动的图和图表。
同时,它允许你以SVG(可扩展矢量图)或PNG(可移植图形格式)下载你的可视化资料,用于多种应用并进行相应的定制。
它可以下载Python 3.6, 3.7, 3.8, 3.9, 和 pypy,其Linux发行包适用于以下版本的Linux:。
Fedora
Gentoo
Ubuntu
Debian
Arch Linux
你可以下载它的主包,里面有所有可用的图表、配置类和地图扩展命名空间模块。
何时使用Pygal
Pygal是一个Python数据可视化库,它允许你用最少的编码工作来创建时尚和互动的Python图。
然而,如果你想知道在什么项目或场景下使用Pygal,那么如果你想在你的机器上打印出最佳分辨率的图,Pygal允许你以SVG、PNG、Etree、Base 64数据URI、Browser和PyQuery下载你的可视化图。
此外,你可以使用Pygal使用Flask App或Django响应来显示你的图,或者直接在你的HTML中参考其嵌入网页文档。
在处理复杂的数据集时,选择Pygal是因为它具有高度的可定制性,为你提供不同的图表(线图、条形图、柱状图、饼图、箱形图、点图等)、样式(内置样式、参数化样式等)、图表配置、序列配置、值配置(标签、样式、节点属性、链接)、火花线(火花文本等)、表格(样式、总数、转置)和输出格式。
Pygal的好处
你现在一定知道Pygal允许你创建漂亮的交互式图表,而且它是完全开源的库。现在,我们将强调一些最好的功能,使它们值得在你的项目中使用。
它有三个独立的地图包,以保持模块的体积小,便于用户使用。
它为大多数图形提供了互动性,为你提供了数据探索、过滤掉某些特征、放大/缩小等功能。
它通过丰富的支持和社区进行优化,使用户能够创建和使用SVG图像。
它通过提供三个主要概念--数据、布局和数字对象,让你有远见。使用这些概念,你可以轻松地解决多种复杂的可视化问题。
与市场上其他流行的Python数据可视化库的比较
互联网上有许多不同的可视化库。Matplotlib以其强大的功能而闻名,Seaborn以其易用性而闻名,Bokeh以其互动性而闻名,Plotly以其协作性而闻名,等等。
同样,Pygal也因其对SVG图像的支持而闻名。然而,让我们比较一下Pygal和其他库,了解为什么大多数数据科学家仍然喜欢其他库而不是Pygal。
Pygal
Github链接:https://github.com/Kozea/pygal
Github星级: 2.4K
Github关注者 136
Github Forks: 398
Github贡献者 62
代码质量 L2
编程语言。Python
Matplotlib
Github链接: https://github.com/matplotlib/matplotlib
Github星级: 15.2K
Github关注者。573
Github Forks: 6.3K
Github贡献者。1143
代码质量。L3
编程语言 Python
Seaborn
Github链接: https://github.com/mwaskom/seaborn
Github星级: 9.2K
Github关注者: 248
Github Forks: 1.6K
Github贡献者。148
代码质量。L2
编程语言。Python
绘图
Github链接: https://github.com/plo
实现(安装,不同的方法和函数)与一个示例代码
在了解了Pygal库和它的优点之后,我们看到了它与其他可视化库的比较。我们已经准备好去探索所有的实用功能,并在你的项目中实现Pygal。
打开jupyter笔记本,开始编写代码。
pip install pygal
import pygal
上面的命令将在你的机器上安装pygal库。
注意:我想感谢Pygal文档的维护。本综合指南中使用的所有代码都来自其官方页面上的官方文档。
现在我们将看到pygal库所提供的不同风格的绘图。
- 线形图
通过pygal自带的不同的线型图,绘制它们是非常简单和容易的。
你首先要导入pygal库,然后创建一个图表类型的对象。例如,在一个简单的线形图中,你使用pygal.Line()或者pygal对于一个水平线pygal.HorizontalLine()。
让我们看看下面不同类型的线图。
Line_Chart = pygal.Line()
Line_Chart.title = ' Line Chart'
Line_Chart.x_labels = map(str, range(2005, 2016))
Line_Chart.add('A', [None, None, 0, 16.1, 22, 30, 36.9, 45.1, 46.1, 42.33, 37.11])
Line_Chart.add('B', [None, None, None, None, None, None, 0, 3.5, 10.1, 23.1, 35.2])
Line_Chart.add('C', [85.1, 84.1, 84.1, 74.1, 64, 58.0, 54.1, 44.3, 36.9, 26.5, 20.4])
Line_Chart.add('D', [14.1, 15.8, 15.1, 8.8, 8, 10.1, 8.4, 5.1, 6.6, 6.1, 7.4])
Line_Chart.render_to_file('Line_Chart.svg')
Line_Chart = pygal.HorizontalLine()
Line_Chart.title = 'Horizontal Line Bar'
Line_Chart.x_labels = map(str, range(20005, 2016))
Line_Chart.add('A', [None, None, 0, 16.1, 22, 30, 36.9, 45.1, 46.1, 42.33, 37.11])
Line_Chart.add('B', [None, None, None, None, None, None, 0, 3.5, 10.1, 23.1, 35.2])
Line_Chart.add('C', [85.1, 84.1, 84.1, 74.1, 64, 58.0, 54.1, 44.3, 36.9, 26.5, 20.4])
Line_Chart.add('D', [14.1, 15.8, 15.1, 8.8, 8, 10.1, 8.4, 5.1, 6.6, 6.1, 7.4])
Line_Chart.range = [0, 100]
Line_Chart.render_to_file('Line_Chart_hori.svg')
Line_Chart = pygal.StackedLine(fill=True)
Line_Chart.title = 'Stacked line Chart'
Line_Chart.x_labels = map(str, range(2005, 2016))
Line_Chart.add('A', [None, None, 0, 16.1, 22, 30, 36.9, 45.1, 46.1, 42.33, 37.11])
Line_Chart.add('B', [None, None, None, None, None, None, 0, 3.5, 10.1, 23.1, 35.2])
Line_Chart.add('C', [85.1, 84.1, 84.1, 74.1, 64, 58.0, 54.1, 44.3, 36.9, 26.5, 20.4])
Line_Chart.add('D', [14.1, 15.8, 15.1, 8.8, 8, 10.1, 8.4, 5.1, 6.6, 6.1, 7.4])
Line_Chart.render_to_file('Line_Chart_stack.svg')
- 条形图
通过pygal自带的不同的条形图,可以很简单地绘制它们。
你首先要导入pygal库,然后创建一个图表类型的对象。例如,在一个简单的条形图中,你使用 pygal. Bar(),或者对于一个水平条形图使用pygal.HorizontalLine()。
让我们看看下面不同类型的条形图。
Bar_Chart = pygal.Bar()
Bar_Chart.title = ' Bar Graph '
Bar_Chart.x_labels = map(str, range(2005, 2016))
Bar_Chart.add('A', [None, None, 0, 16.1, 22, 30, 36.9, 45.1, 46.1, 42.33, 37.11])
Bar_Chart.add('B', [None, None, None, None, None, None, 0, 3.5, 10.1, 23.1, 35.2])
Bar_Chart.add('C', [85.1, 84.1, 84.1, 74.1, 64, 58.0, 54.1, 44.3, 36.9, 26.5, 20.4])
Bar_Chart.add('D', [14.1, 15.8, 15.1, 8.8, 8, 10.1, 8.4, 5.1, 6.6, 6.1, 7.4])
Bar_Chart.render_to_file('Bar_Chart.svg')
Bar_Chart = pygal.HorizontalBar()
Bar_Chart.title = 'Horizontal Bar Graph'
Bar_Chart.x_labels = map(str, range(2005, 2016))
Bar_Chart.add('A', [None, None, 0, 16.1, 22, 30, 36.9, 45.1, 46.1, 42.33, 37.11])
Bar_Chart.add('B', [None, None, None, None, None, None, 0, 3.5, 10.1, 23.1, 35.2])
Bar_Chart.add('C', [85.1, 84.1, 84.1, 74.1, 64, 58.0, 54.1, 44.3, 36.9, 26.5, 20.4])
Bar_Chart.add('D', [14.1, 15.8, 15.1, 8.8, 8, 10.1, 8.4, 5.1, 6.6, 6.1, 7.4])
Bar_Chart.render_to_file('Bar_Chart_hori.svg')
Bar_Chart = pygal.StackedBar()
Bar_Chart.title = 'Stacked bar Graph'
Bar_Chart.x_labels = map(str, range(2006, 2017))
Bar_Chart.add('A', [None, None, 0, 16.1, 22, 30, 36.9, 45.1, 46.1, 42.33, 37.11])
Bar_Chart.add('B', [None, None, None, None, None, None, 0, 3.5, 10.1, 23.1, 35.2])
Bar_Chart.add('C', [85.1, 84.1, 84.1, 74.1, 64, 58.0, 54.1, 44.3, 36.9, 26.5, 20.4])
Bar_Chart.add('Others', [14.1, 15.8, 15.1, 8.8, 8, 10.1, 8.4, 5.1, 6.6, 6.1, 7.4])
Bar_Chart.render_to_file('Bar_Chart_stack.svg')
- 柱状图
接下来,我们有一个独特的柱状图类型,需要3个参数,名为Histogram。它需要高度、X-开始和X-结束作为参数。让我们在下面绘制一个简单的直方图。
Hist = pygal.Histogram()
Hist.add('Wide bars', [(6, 1, 11), (5, 6, 13), (3, 1, 16)])
Hist.add('Narrow bars', [(11, 2, 3), (13, 5, 5.6), (9, 12, 14)])
Hist.render_to_file('Histogram.svg')
- XY
你可以在内置方法的帮助下在XY平面上设计一个图表。让我们在下面绘制余弦图。
from math import cos
XY_chart = pygal.XY()
XY_chart.title = 'XY Chart'
XY_chart.add('x = cos(y)', [(cos(x / 20.), x / 20.) for x in range(-40, 40, 4)])
XY_chart.add('y = cos(x)', [(x / 20., cos(x / 20.)) for x in range(-40, 40, 4)])
XY_chart.add('x = 1', [(2, -4), (2, 4)])
XY_chart.add('x = -1', [(-1, -4), (-1, 4)])
XY_chart.add('y = 1', [(-4, 1), (4, 1)])
XY_chart.add('y = -1', [(-4, -1), (4, -1)])
对于散点图,在XY对象中禁用描边。
XY_chart = pygal.XY(stroke=False)
XY_chart.title = 'XY Scatter Plot'
XY_chart.add('A', [(0, 0), (.2, .3), (.5, .3), (.6, 2), (.8, .6), (1, 1.01), (1.4, 1.3), (2, 3.26), (2.44, 2.1)])
XY_chart.add('B', [(.1, .14), (.11, .22), (.4, .4), (.6, .4), (.22, .22), (.4, .3), (.7, .8), (.7, .8)])
XY_chart.add('C', [(.06, .02), (.12, .01), (1.6, 1.8), (1.63, 1.7), (1.8, 1.62), (1.5, 1.83), (1.7, 1.24), (2.1, 2.22), (2.19, 1.99)])
XY_chart.render_to_file('xy_scatter.svg')
- 饼图
pygal中不同类型的饼图有半饼图、甜甜圈图或多系列饼图。
让我们在下面实现一些。
Pie_Chart = pygal.Pie()
Pie_Chart.title = 'PIE Chart'
Pie_Chart.add('C', 19.1)
Pie_Chart.add('A', 36.1)
Pie_Chart.add('B', 36.2)
Pie_Chart.add('D', 4.4)
Pie_Chart.add('E', 2.5)
Pie_Chart.render_to_file('PC.svg')
Pie_Chart = pygal.Pie(inner_radius=.4)
Pie_Chart.title = 'PIE Chart :Donut'
Pie_Chart.add('C', 19.1)
Pie_Chart.add('A', 36.1)
Pie_Chart.add('B', 36.2)
Pie_Chart.add('D', 4.4)
Pie_Chart.add('E', 2.5)
Pie_Chart.render_to_file('PC_Donut.svg')
Pie_Chart = pygal.Pie(half_pie=True)
Pie_Chart.title = 'PIE Chart: Half Donut'
Pie_Chart.add('C', 19.1)
Pie_Chart.add('A', 36.1)
Pie_Chart.add('B', 36.2)
Pie_Chart.add('D', 4.4)
Pie_Chart.add('E', 2.5)
Pie_Chart.render_to_file('HALF-PC_Donut.svg')
- 雷达图
雷达图对于比较两组或多组类的多个特征或特性来说是非常出色的,Pygal为你提供了绘制Kiviat图的选项,非常方便。让我们在下面绘制一个简单的雷达图。
Radar_Chart = pygal.Radar()
Radar_Chart.title = 'Radar'
Radar_Chart.x_labels = ['R', 'D', 'C', 'X', 'E', 'H', 'S', 'N']
Radar_Chart.add('B', [6392, 8211, 7521, 7228, 12434, 1640, 2143, 8637])
Radar_Chart.add('A', [7474, 8089, 11701, 2631, 6351, 1042, 3697, 9410])
Radar_Chart.add('D', [3471, 2932, 4103, 5219, 5811, 1818, 9011, 4668])
Radar_Chart.add('C', [41, 42, 58, 78, 143, 126, 31, 132])
Radar_Chart.render_to_file('Radar.svg')
- 箱形图
盒形图可以让你对基于五个因素的数据分布有一个高层次的认识:最小值、最大值、中位数、第一四分位数(Q1)和第三四分位数(Q3)。在pygal中,默认情况下,你可以绘制一个以晶须为数据集极值的箱形图,箱形图从Q1到Q3,中间的线代表给定特征的中值。
让我们绘制一个简单的箱形图。
Box_Plot = pygal.Box()
Box_Plot.title = 'Box Chart'
Box_Plot.add('B', [6396, 8222, 7530, 7217, 12364, 1661, 2223, 8617])
Box_Plot.add('A', [7471, 8091, 11701, 2631, 6362, 1043, 3787, 9440])
Box_Plot.add('D', [3471, 2931, 4201, 5221, 5811, 1821, 9011, 4662])
Box_Plot.add('C', [45, 42, 56, 73, 142, 131, 31, 101])
Box_Plot.render_to_file('Box.svg')
Pygal有选项可以根据给定特征的标准差来改变feature
Box_Plot = pygal.Box(box_mode="stdev")
Box_Plot.title = 'STD. Deviation Box Chart'
Box_Plot.add('B', [6396, 8222, 7530, 7217, 12364, 1661, 2223, 8617])
Box_Plot.add('A', [7471, 8091, 11701, 2631, 6362, 1043, 3787, 9440])
Box_Plot.add('D', [3471, 2931, 4201, 5221, 5811, 1821, 9011, 4662])
Box_Plot.add('C', [45, 42, 56, 73, 142, 131, 31, 101])
Box_Plot.render_to_file('Box_stdDev.svg')
- 点状图
一个简单的点状图或条状图由在图表上绘制成点状的数据点组成。它对于检查特定的数据趋势或聚类模式很有帮助。Pygal为你提供了在正反两方面的数据点上绘制类似打卡的图表的选项。
下面让我们绘制一个简单的点图。
Dot_Chart = pygal.Dot(x_label_rotation=35)
Dot_Chart.title = 'Dot Chart'
Dot_Chart.x_labels = ['Ri', 'De', 'Cr', 'Ra', 'Ea', 'Re', 'Sp', 'Na']
Dot_Chart.add('B', [6396, 8222, 7530, 7217, 12364, 1661, 2223, 8617])
Dot_Chart.add('A', [7471, 8091, 11701, 2631, 6362, 1043, 3787, 9440])
Dot_Chart.add('D', [3471, 2931, 4201, 5221, 5811, 1821, 9011, 4662])
Dot_Chart.add('C', [45, 42, 56, 73, 142, 131, 31, 101])
Dot_Chart.render_to_file('Dot.svg')
Dot_Chart = pygal.Dot(x_label_rotation=35)
Dot_Chart.add('Normal', [11, 51, 75, 86, 24])
Dot_Chart.add('With negatives', [0, -35, -21, 32, -72])
Dot_Chart.render_to_file('Dot_Negative.svg')
- 漏斗图
漏斗图是表示任何会议或过程的阶段的一种很好的方式。Pygal可以帮助你最容易地绘制一个漏斗图。让我们看看如何绘制一个简单的漏斗图。
Funnel_Chart = pygal.Funnel()
Funnel_Chart.title = 'Funnel Chart'
Funnel_Chart.x_labels = ['Ri', 'De', 'Cr', 'Ra', 'Ea', 'Re', 'Sp', 'Na']
Funnel_Chart.add('Opera', [3478, 2833, 4233, 5329, 5910, 1838, 9023, 4679])
Funnel_Chart.add('A', [7471, 8091, 11701, 2641, 6362, 1042, 3787, 9440])
Funnel_Chart.add('B', [6391, 8211, 7521, 7211, 12463, 1661, 2124, 8609])
Funnel_Chart.render_to_file('Funnel.svg')
- 实体仪表盘
实体仪表盘图是最受欢迎的角度仪表盘图,用于现实世界的仪表盘或仪表盘,因为它们可以将一个范围内的数字可视化,一目了然。
下面让我们用Pygal绘制一个简单的SolidGauge图。
Gauge = pygal.SolidGauge(inner_radius=0.75)
per_format = lambda x: '{:.10g}%'.format(x)
dol_format = lambda x: '{:.10g}$'.format(x)
Gauge.value_formatter = per_format
Gauge.add('Series A', [{'value': 226000, 'max_value': 1276000}],
formatter= dol_format)
Gauge.add('Series B', [{'value': 160, 'max_value': 150}])
Gauge.add('Series C', [{'value': 5}])
Gauge.add(
'Series D', [
{'value': 52, 'max_value': 150},
{'value': 14, 'max_value': 150}])
Gauge.add('Series E', [{'value': 69, 'max_value': 150}])
Gauge.add('Series F', 95)
Gauge.add('Series G', [{'value': 150, 'max_value': 150}])
Gauge.render_to_file('SolidGauge.svg')
- 仪表盘
Gauge图是一种最常用于具有定量背景的单一数据值的图,它跟踪KPI的进展。
下面让我们用Pygal绘制一个简单的Gauge图。
Gauge_chart = pygal.Gauge(human_readable=True)
Gauge_chart.title = 'Gauge Plot'
Gauge_chart.range = [0, 15000]
Gauge_chart.add('X', 8219)
Gauge_chart.add('Y', 8091)
Gauge_chart.add('Z', 2953)
Gauge_chart.add('V', 42)
Gauge_chart.render_to_file('Gauge.svg')
- 树状图
树状图是一个重要的图表,它提供了一个分层的数据视图,经常显示销售数据。
下面让我们用Pygal绘制一个简单的Treemap。
Treemap = pygal.Treemap()
Treemap.title = 'Treemap Plot'
Treemap.add('X', [1, 2, 11, 3, 2, 2, 1, 2, 11, 2 , 3, None, 8])
Treemap.add('Y', [5, 3, 6, 11, 4, 5, 3, 8, 5, -11, None, 9, 4, 2])
Treemap.add('Z', [4, 9, 4, 4, 6, 4, 4, 6, 5, 13])
Treemap.add('Q', [24, 19])
Treemap.add('E', [2, 1, 2, 1, 4, 4, 2, 1, 4,
3, 4, 2, 1, 2, 2, 2, 2, 2])
Treemap.add('A', [21])
Treemap.add('B', [5, 9.2, 8.2, 11, 3, 4, 1])
Treemap.add('C', [11, 2, 2])
Treemap.render_to_file('Treemap.svg')
- 地图
地图显示的是不同地区或国家之间的符号表示和关系。Pygal提供了绘制世界地图、法国地图和瑞士地图的选项。为了保持pygal包的小体积,这些地图现在被单独打包了,下面是根据你的项目安装和配置它们的链接。
https://www.pygal.org/en/stable/documentation/types/maps/index.html
一些额外的功能
除了不同风格的图表之外,它还提供了一些额外的功能,我们将在下面讨论。
然而,每个功能的实现都不在本指南的范围之内。因此,建议查看官方文档页面。
样式。
Pygal为用户提供了不同的选项来设计他们的图形和图表。有内置的样式来改变图表的颜色模式,如霓虹灯、红色、蓝色、绿松石、深绿色、浅日光色等。你也可以导入自定义的CSS样式,在你的图表中使用。
图表配置。它还为你提供了改变图表配置的选项,如改变标题、X-标签、Y-标签、大小、图例、轴、数据等等。
嵌入到网页中。它提供了为你保存的SVG图表设置URL条目的选项,以便在你的HTML代码中放入标签。
总结
在本指南中,我们讨论了一个开源的数据可视化库,Pygal。我们已经看到了可以实现的不同类型的图表。此外,本指南还解释了必须知道的功能以及与其他基于Python的数据可视化库的比较。我希望所强调的Pygal数据可视化库的好处和重要性是明确的,以帮助你做出决定。
现在,我很想看看你们这些人将如何在你们的项目中使用Pygal。如果你今天学到了有价值的东西,别忘了点赞、分享和评论。