系统性地介绍Python 的绘图语法系统,包括matplotlib、Seaborn、plotnine 包,以及用于地理空间数据可视化的Basemap 包。
常见的二维和三维图表的绘制方法,包括简单的柱形图系列、条形图系列、折线图系列、地图系列等。
本书主要介绍如何使用Python 中的matplotlib、Seaborn、plotnine、Basemap 等包绘制专业图表。本书首先介绍Python 语言编程的基础知识,以及NumPy 和Pandas 的数据操作方法;再对比介绍matplotlib、Seaborn 和plotnine 的图形语法。本书系统性地介绍了使用matplotlib、Seaborn 和plotnine 绘制类别对比型、数据关系型、时间序列型、整体局部型、地理空间型等常见的二维和三维图表的方法。另外,本书也介绍了商业图表与学术图表的规范与差异,以及如何使用matplotlib 绘制HTML 交互页面动画。
序言
In the last 20 years the amount of data created has grown massively. The need to understand this data,communicate what it means and use it to make better decisions has also grown. What has not changed is the human biology, so our brains must make sense of this ever-increasing amount information. As pictures are easier to understand than numbers, good visualisations have become more important as data grows in
quantity, size and complexity.
(在过去的20 年中,随着社会产生数据的大量增加,对数据的理解、解释与决策的需求也随之增加。而固定不变是人类本身,所以我们的大脑必须学会理解这些日益增加的数据信息。所谓“一图胜千言”,对于数量、规模与复杂性不断增加的数据,优秀的数据可视化也变得愈加重要。)
Data comes in different kinds so it demands different methods to make sense of it. It is not possible to have a single tool/program that will work for all datasets, so we must be flexible. Many times we have to manipulate data before we can visualise it. In fact, a visualisation is typically part of a wider analysis, so we must learn to write code to analyse and visualise the data. Programming is the means by which we bring out the flexibility.
(数据来源各不同,这也导致我们需要不同的方法去理解它们。想使用一种工具或者编程语言就适用于所有数据,这是天方夜谭。所以,我们必须随机应变。在很多情况下,我们不得不在操作数据前先可视化数据。实际上,数据可视化是数据分析的一个特别部分。所以,我们必须学会编程去分析与可视化数据。编程可以给我们带来各种灵活性的方法。)
Now comes the first choice, in what programming language shall we write the code? We have to choose at least one and the authors of this book have chosen the Python programming language.
(现在面临的第一个选择就是我们将使用什么样的语言编程。我们不得不选择一种编程语言,而这本书选择Python 作为编程语言。)
Python is a widely used general programming language that is easy to learn and it has been embraced by a large scientific computing community who have created an open ecosystem of packages for anlaysing and visualising data. By choosing Python these packages become available to you — free of charge. For example, key packages like NumPy and Pandas which are covered in Chapter 2, make it possible to represent data in sequences and in tables, and they provide many useful methods to act on this data.
(Python 是一种广泛使用的编程语言,易于学习,而且一个巨大的科学计算社区开发了一个拥有许多数据分析与可视化包的开源生态圈。如果选择Python 作为编程语言,这些包就可以供你免费使用。比如,本书第2 章讲解的Python 核心包NumPy 和Pandas,可以使用序列和表格表示数据,同时还提供了许多有用的数据操作方法。)
The next choice is, what package(s) to use for visualisation? The authors have three choices for you;Matplotlib, Seaborn and Plotnine. Are they good choices? Yes, they are.
(接下来的选择就是我们该使用何种包实现数据可视化。本书作者提供了三个选择:Matplotlib、Seaborn 和Plotnine。那它们是不是好的选择?是的,非常正确。)
Matplotlib is the most widely used package for data visualisation in Python. Powerful and versatile, it can be used to create figures for publication or to create interactive environments. In 1999 Leland Wilkinson in the book "The Grammar of Graphics" introduced an elegant way with which to think about data visualisation. This "Grammar" gives us a structured way with which to transform data into to a visualisation and it makes it easy to create many kinds of complicated plots. This is where the Seaborn and plotnine packages come in, they are built on top of matplotlib and are inspired by ggplot2 –an implementation of "The Grammar of Graphics" by Hadley Wickham.
(在Python 中使用最为广泛的数据可视化包是matplotlib。它功能强大且齐全,可以用于制作出版物中的图表,也可以用于制作交互式图表。Leland Wilkinson 于1999 年撰写的书籍《图形语法》介绍了一种实现数据可视化的优秀方法。这种语法给了我们一种将数据转换成图表的结构性方法,而且使绘制各种复杂图表变得更加容易。这就是Seaborn 和plotnine 包的由来。它们建立在matplotlib
包的基础上,而且启发于R 语言的ggplot2 包- Hadley Wickham 基于《图形语法》开发的数据可视化包。)
The programming language and key packages are choices made for you, but making beautiful visualisations requires many more choices. These choices change depending on the data, display medium and audience; they are what this book will help you learn to make. In here, you will get exposed to a variety of plots, you will learn about the advantages of different plots for the same data, you will learn about *The Grammar of Graphics*, you will learn how to create visualisations with multiple plots and you will learn how to ustomize the visualisations and ultimately you will learn how to make beautiful visualisations.
(编程语言和相应的核心包已经帮你选择,但是制作优美的图表仍需更多技能。这些技能的选择取决于你的数据、展示媒介与受众,这就是这本书将要帮助你学习的内容。在这里,你会接触到各种各样的图表,会学习到同一数据不同可视化方法的优势,会学习到“图形语法”,还会学习到如何使用各种图表实现数据可视化,学习到如何定制化图表,最终你会学习到如何制作优美的数据可视化。)
Now you have no choice but to proceed.
(在这里,你别无选择,唯有勇往直前!)
Hassan Kibirige
Author/Maintainer of plotnine
(plotnine 包的开发者/维护者)
2020 年1 月9 日
目录
第1 章 Python 编程基础 1
1.1 Python 基础知识 . 2
1.1.1 Python 3.7 的安装 . 2
1.1.2 包的安装与使用 . 3
1.1.3 Python 基础操作 . 4
1.2 6 种常用数据结构 5
1.2.1 列表 . 5
1.2.2 字典 . 6
1.2.3 元组 . 6
1.3 控制语句与函数编写 . 6
1.3.1 控制语句 . 6
1.3.2 函数编写 . 8
第2 章 数据处理基础 . 10
2.1 NumPy:数值运算 11
2.1.1 数组的创建 11
2.1.2 数组的索引与变换 . 12
2.1.3 数组的组合 . 13
2.1.4 数组的统计函数 . 14
2.2 Pandas:表格处理 15
2.2.1 Series 数据结构 . 15
2.2.2 数据结构:DataFrame 16
2.2.3 数据类型:Categorical . 18
2.2.4 表格的变换 . 19
2.2.5 变量的变换 . 20
2.2.6 表格的排序 . 20
2.2.7 表格的拼接 . 21
2.2.8 表格的融合 . 22
2.2.9 表格的分组操作 . 23
2.2.10 数据的导入与导出 . 26
2.2.11 缺失值的处理 . 28
第3 章 数据可视化基础 29
3.1 matplotlib . 33
3.1.1 图形对象与元素 . 33
3.1.2 常见图表类型 . 36
3.1.3 子图的绘制 . 38
3.1.4 坐标系的变换 . 41
3.1.5 图表的导出 . 44
3.2 Seaborn 44
3.2.1 常见图表类型 . 45
3.2.2 图表风格与颜色主题 . 46
3.2.3 图表的分面绘制 . 48
3.3 plotnine 50
3.3.1 geom_???()与stat_???() 51
3.3.2 美学参数映射 . 54
3.3.3 度量调整 . 58
3.3.4 坐标系及其度量 . 64
3.3.5 图例 . 69
3.3.6 主题系统 . 71
3.3.7 分面系统 . 73
3.3.8 位置调整 . 74
3.4 可视化色彩的运用原理 . 76
3.4.1 RGB 颜色模式 76
3.4.2 HSL 颜色模式 . 77
3.4.3 LUV 颜色模式 79
3.4.4 颜色主题的搭配原理 . 80
3.4.5 颜色主题方案的拾取使用 . 84
3.4.6 颜色主题的应用案例 . 87
3.5 图表的基本类型 . 91
3.5.1 类别比较 . 91
3.5.2 数据关系 . 92
3.5.3 数据分布 . 93
3.5.4 时间序列 . 94
3.5.5 局部整体 . 94
3.5.6 地理空间 . 95
第4 章 类别比较型图表 96
4.1 柱形图系列 . 97
4.1.1 单数据系列柱形图 . 98
4.1.2 多数据系列柱形图 . 100
4.1.3 堆积柱形图 . 101
4.1.4 百分比堆积柱形图 . 102
4.2 条形图系列 . 104
4.3 不等宽柱形图 . 105
4.4 克利夫兰点图 . 106
4.5 坡度图 . 108
4.6 南丁格尔玫瑰图 110
4.7 径向柱图 114
4.8 雷达图 117
4.9 词云图 119
第5 章 数据关系型图表 122
5.1 散点图系列 . 123
5.1.1 趋势显示的二维散点图 . 123
5.1.2 分布显示的二维散点图 . 131
5.1.3 气泡图 . 136
5.1.4 三维散点图 . 139
5.2 曲面拟合 . 142
5.3 等高线图 . 145
5.4 散点曲线图系列 . 147
5.5 瀑布图 . 149
5.6 相关系数图 . 156
第6 章 数据分布型图表 159
6.1 统计直方图和核密度估计图 . 161
6.1.1 统计直方图 . 161
6.1.2 核密度估计图 . 161
6.2 数据分布图表系列 . 165
6.2.1 散点数据分布图系列 . 166
6.2.2 柱形分布图系列 . 168
6.2.3 箱形图系列 . 169
6.2.4 小提琴图 . 175
6.3 二维统计直方图和核密度估计图 . 179
6.3.1 二维统计直方图 . 179
6.3.2 二维核密度估计图 . 180
第7 章 时间序列型图表 184
7.1 折线图与面积图系列 . 185
7.1.1 折线图 . 185
7.1.2 面积图 . 185
7.2 日历图 . 192
7.3 量化波形图 . 195
第8 章 局部整体型图表 199
8.1 饼状图系列 . 200
8.1.1 饼图 . 200
8.1.2 圆环图 . 202
8.2 马赛克图 . 203
8.3 华夫饼图 . 206
8.4 块状/点状柱形图系列 208
第9 章 高维数据型图表 213
9.1 高维数据的变换展示 . 215
9.1.1 主成分分析法 . 215
9.1.2 t-SNE 算法 217
9.2 分面图 . 218
9.3 矩阵散点图 . 221
9.4 热力图 . 224
9.5 平行坐标系图 . 227
9.6 RadViz 图 229
第10 章 地理空间型图表 231
10.1 不同级别的地图 . 232
10.1.1 世界地图 . 232
10.1.2 国家地图 . 238
10.2 分级统计地图 . 241
10.3 点描法地图 . 244
10.4 带柱形的地图 . 248
10.5 等位地图 . 250
10.6 点状地图 . 252
10.7 简化示意图 . 256
10.8 邮标法 . 260
第11 章 数据可视化案例 263
11.1 商业图表绘制示例 . 264
11.1.1 商业图表绘制基础 264
11.1.2 商业图表绘制案例① 269
11.1.3 商业图表绘制案例② 270
11.2 学术图表绘制示例 . 273
11.2.1 学术图表绘制基础 274
11.2.2 学术图表绘制案例 276
11.3 数据分析与可视化案例 . 278
11.3.1 示意地铁线路图的绘制 278
11.3.2 实际地铁线路图的绘制 280
11.3.3 地铁线路图的应用 281
11.4 动态数据可视化演示 . 286
11.4.1 动态条形图的制作 286
11.4.2 动态面积图的制作 291
11.4.3 三维柱形地图动画的制作 296
参考文献 . 301