来源 | 「Practical Python Data Visualization A Fast Track Approach To Learning Data Visualization With Python」
作者 | Ashwin Pajankar
译者 | Liangchu
校对 | gongyouliu
编辑 | auroral-L
全文共3300字,预计阅读时间20分钟。
第三章 使用Leather进行数据可视化
在Jupyter Notebook上运行OS指令
Leather简介
可视化的更多类型
标尺Scales
风格Styling
总结
第三章 使用Leather进行数据可视化
在第二章中,我们熟悉了使用Jupyter Notebook进行Python编程的步骤,所以现在你可以放心地使用Jupyter Notebook编写交互式Python程序了。
在本章中,我们将使用Jupyter Notebook、Python、数据可视化库leather进行基本的数据可视化。以下是我们将在本章中介绍的内容:
• leather的简介
• 更多类型的可视化
• 标尺
• 风格
在Jupter Notebook上运行OS(operating system)命令
你已经知道如何使用Jupyter Notebook进行Python编程,现在我们将学习如何在笔记本notebook中执行OS命令,这对于我们使用pip安装许多实用程序是很有用的,而且我们可以在笔记本中直接运行它,所以很方便。
为本章中即将涉及的所有代码创建一个新的Jupyter笔记本。本书每一章的学习中,我们都会这么做,所以到本书的最后,我们将拥有按章节分类的所有代码,并存放在笔记本中。
要在笔记本单元格中执行OS命令,就要使用!作为前缀,示例命令如下:
!dir
该命令的输出如图(3-1)所示:
可以通过运行以下语句更新pip:
!pip3 install--upgrade pip
运行以下语句安装用于数据可视化演示的库:
!pip3 install leather
这将在计算机上安装leather数据可视化库。在下一节中,我们将使用笔记本开始学习Python利用leather库的可视化。
Leather简介
Leather是一个易于使用且流行的Python数据可视化库。你可以在Python Package Index(PyPI,Python软件包索引)所在的网站https://pypi.org/project/leather/上找到该软件包。PyPI是第三方软件包的存储库,我们可以使用pip3实用程序下载它。我们还可以在PyPI上搜索包的可用性。在笔记本中运行以下命令:
!pip3 search leather
输出如图(3-2)所示:
在继续学习这个包之前,我们需要提前了解一些关于Python编程语言的知识。在Python中,制表符(tab)或缩进(index)用于指示代码块。在一些流行的编程语言比如C、C++和java中,多行代码块被封闭在括号{}中。然而Python强制程序员使用缩进表示代码块,除此之外别无其他办法。以下面的代码为例:
a = 3
if a%2 == 0:
print('Even')
else:
print('Odd')
在笔记本上运行代码即可看到结果了。还有一件事你也可以试试:我们先前学习过PEP 20,即Python之禅。Python创始人将其作为彩蛋添加到解释器中,你可以运行以下语句调用它:
import this
若你在笔记本中运行该语句,它会在输出中打印Python之禅的所有内容。
注意,无论我们要用Jupyter Notebook演示什么程序,都可以做一些修改然后在IDLE中运行。我们使用Jupyter笔记本是因为它在即时反馈和交互上的优势。现在让我们使用import语句将leather库添加到笔记本中。每个会话中只需导入一次就可以在整个会话中使用了。输入以下语句:
import leather
运行此命令,它会将库导入当前笔记本的会话中。使用标题(heading)区分每个topic的内容不失为一个好主意,不过用不用都取决于你自己。你会发现,我经常在本书的笔记本中使用标题来提供上下文和参考,以说明我正在演示的内容。这是个好习惯,可能你会想使用这种方法。
让我们编写一些简单的代码来可视化几个点。我们可以在X-Y坐标系中定义点。我们可以使用元组(tuple)列表(list)来定义点,如下所示:
data1 = [(1.5, 2), (2, 3), (4.5, 6), (7.5, 4)]
我们也可以将它们定义为一列列表(a list of lists):
data1 = [[1.5, 2], [2, 3], [4.5, 6], [7.5, 4]]
我们也可以将它们定义为元组的元组(a tuple of tuples):
data1 = ((1.5, 2), (2, 3), (4.5, 6), (7.5, 4))
我们还可以将它们定义为列表的元组( a tuple of lists):
data1 = ([1.5, 2], [2, 3], [4.5, 6], [7.5, 4])
如你所见,leather库并不是很特别,而且可以很灵活地定义数据。
下面定义一个图表(chart)对象:
chart = leather.Chart('Simple pairs of x-y')
接下来,创建一个点图(dot chart):
chart.add_dots(data1)
然后使用如下代码将图表可视化:
chart.to_svg()
它将在这个笔记本上显示输出,如图(3-3)所示:
我们可以使用以下语句将图像保存到磁盘:
chart.to_svg('image1.svg')
我们可以按如下方式自定义点:
chart = leather.Chart('Customised Dots')chart.add_dots(data1, fill_color='#00ff00', radius=10)chart.to_svg()
接着让我们定义更多的数据点:
data2 = [(2, 3), (4, 5), (5, 6), (7, 5)]
我们还可以将多个系列(这里的系列指的是不同风格的点,即data1和data2)的点可视化如下:
chart=leather.Chart('Visualizing Multiple series')
chart.add_dots(data1)
chart.add_dots(data2)
chart.to_svg()
输出如图(3-4)所示:
如上图(3-4)所示,leather根据所属系列自动为点分配不同的颜色。
可视化的更多类型
我们可以通过将点连接起来以线段形式将数据可视化,如下所示:
chart=leather.Chart('Visualizing Lines')
chart.add_line(data1)
chart.to_svg()
输出如图(3-5)所示:
我们可以按如下方式自定义线条可视化:
chart=leather.Chart('Customized Line')
chart.add_line(data1,stroke_color='#0000ff', width=3)
chart.to_svg()
如图(3-6)显示输出:
我们可以将多条线段可视化如下:
chart=leather.Chart('Visualizing Multiple Lines')
chart.add_line(data1)
chart.add_line(data2)
chart.to_svg()
如图(3-7)显示输出:
我们可以在单个可视化中可视化多个类型的图,如下所示:
chart=leather.Chart('Visualizing Multiple Types')
chart.add_line(data1)
chart.add_dots(data2)
chart.to_svg()
如图(3-8)显示输出:
我们可以用条形图可视化:
data = [[1, 'A'], [2, 'B'], [3, 'C'], [4, 'D']]
chart=leather.Chart('Visualizing Bars')
chart.add_bars(data)
chart.to_svg()
在我们的数据集中,其中一个维度是文本数据。可视化如图(3-9)所示:
我们可以自定义如下:
chart=leather.Chart('Customizing Bars')
chart.add_bars(data, fill_color='#777777')
chart.to_svg()
输出如图(3-10)所示:
我们可以使用水平列(柱状图)进行可视化,如下所示:
data = [ ('A', 1), ('B', 2), ('C', 3), ('D', 4)]
chart = leather.Chart('Visualizing Columns')
chart.add_columns(data)
chart.to_svg()
输出如图(3-11)所示:
我们可以按以下方式自定义列:
chart = leather.Chart('Customizing Columns')
chart.add_columns(data, fill_color='#77ff77')
chart.to_svg()
输出如图(3-12)所示:
标尺Scales
leather库可以自动程序化地创建各种类型的Scale,能自动为文本数据创建顺序标尺。这个例子和我们前面看到的一样:
chart = leather.Chart('The Ordinal Scale')
chart.add_columns(data)
chart.to_svg()
当数据为数字时,将自动创建线性标尺。我们可以按以下方式设置其边界:
chart = leather.Chart('Linear Scale')
chart.add_x_scale(1, 8)
chart.add_y_scale(1, 7)
chart.add_line(data1)chart.to_svg()
输出如图(3-13)所示:
将自动为时间(时间相关的)数据创建时间标尺:
from datetime import date
data = [
(date(2020, 1, 1), 4),
(date(2020, 3, 1), 6),
(date(2020, 6, 1), 2),
(date(2020, 9, 1), 1)]
chart = leather.Chart('Temporal Scale')
chart.add_x_scale(date(2019, 9, 1), date(2020, 12, 1))
chart.add_line(data)
chart.to_svg()
输出如图(3-14)所示:
风格Styling
leather提供了很多种风格可供选择。我们可以按需求设置轴上的刻度值,如下所示:
chart = leather.Chart('Ticks Demo')
chart.add_x_scale(1, 8)
chart.add_x_axis(ticks=[1, 2, 3, 4, 5, 6, 7, 8])
chart.add_y_scale(1, 7)
chart.add_y_axis(ticks=[1, 2, 3, 4, 5, 6, 7])
chart.add_line(data1)
chart.to_svg()
输出如图(3-15)所示:
我们还可以自定义字体和颜色,用于显示可视化中的值和序列。下面是一个简单的例子:
leather.theme.title_font_family = 'Times New Roman'
leather.theme.legend_font_family = 'Times New Roman'
leather.theme.tick_font_family = 'Times New Roman'
leather.theme.default_series_colors = ['#ff0000', '#00ff00']
chart = leather.Chart('Custom Fonts')
chart.add_line(data1)
chart.add_line(data2)
chart.to_svg()
如图(3-16)显示了这个例子的输出:
我们也可以根据数据点的位置给它们上色,下面的代码演示了这一点。首先将random库导入文件中:
import random
我们将用它生成如下数据点:
data = [(random.randint(0, 250),
random.randint(0, 250)) for i in range(100)]
将创建100个数据点。这100个点的x和y轴的值在0到250里随机选择。我们可以编写一个函数colorizer,根据点的位置以RGB的形式返回颜色值:
def colorizer(location):
return 'rgb(%i, %i, %i)' % (location.x, location.y, 150)
调用此函数来定义点的颜色,如下所示:
chart = leather.Chart('Colorized dots')
chart.add_dots(data, fill_color=colorizer)
chart.to_svg()
输出如图(3-17)所示:
总结
本章介绍了在Python中使用流行的数据可视化库leather进行数据可视化的演示。我们看到了不同类型的可视化、风格和标尺。Leather是一个非常简单的数据可视化库,所以只能可视化简单的形状。
你的业务需求或科学可视化可能需要更复杂、更精细的可视化。为此,你需要熟悉科学的Python生态系统。下一章将详细探讨科学Python生态系统。我们还将学习Numpy n维数组(也称为ndarrays)的基础知识。