【基本工具】S02E19 matplotlib数据可视化之散点图、频次直方图与误差线图绘制

0.本集概览

1.散点图的画法举例
2.频次直方图的画法举例
3.误差线图的画法举例

在这一集,我们介绍在数据分析中使用非常高频的几种图的形式。

1.散点图

1.1.绘制一个简单的散点图

首先说散点图,散点图和线形图最大的区别,顾名思义就是这种图形不再由线段进行连接,而是由一个一个独立的点、圆圈或者其他指定的形状构成:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0,10,100)
plt.scatter(x, np.sin(x), marker='o')
plt.grid()
plt.show()

1.2.如何发挥散点图的优势

如果我们使用上一集中介绍的线形图的绘制方法,在指定线型的情况下,一样可以画出这个图来,那为什么要单独再学一个新的函数呢?

这个问题问的好,因为我这个例子举的过于简单,没能体现其优势。实质上,使用plt.sactter相比plt.plot在创建散点图时的优势是具有更高的灵活性,他可以单独控制每一个散点的不同属性(颜色、大小等),这样就可以通过(坐标位置、颜色、大小)这些多维信息,来表征更多的数据特征,并进行更精细的控制。

我们来绘制这样一组散点图,每个点的位置坐标(x,y)是服从标准正态分布的随机值,点的颜色灰度值是位于(0,1)空间中的随机样本,点的大小是随机值得1000倍,单位是像素。这样通过位置、大小、颜色等多维信息,就能更丰富的表现出散点数据背后所蕴含的多重信息了。

import numpy as np
import matplotlib.pyplot as plt

rng = np.random.RandomState(0)
x = rng.randn(100)
y = rng.randn(100)
colors = rng.rand(100)
sizes = 1000 * rng.rand(100)
plt.scatter(x,y,c=colors,s=sizes,alpha=0.3)
plt.colorbar()
plt.grid(True)
plt.show()


从图中,我们可以直观看出散点的大小所对应的数量信息,右侧添加的颜色条,同来指示颜色所对应的数值信息。这类多颜色与多特征的散点图在探索与演示数据时非常有用。

2.频次直方图

第二类我们要说的图形类型是频次直方图。

2.1.简单的频次直方图

我们先画一个最简单的频次直方图,生成1000个服从标准正态分布的随机变量,然后观察他们在每个点的出现次数。

import numpy as np
import matplotlib.pyplot as plt

data = np.random.randn(1000)
ret = plt.hist(data)
print(ret)
plt.show()

(array([  15.,   39.,   88.,  188.,  216.,  200.,  123.,   84.,   36.,   11.]), 
 array([-2.68292233, -2.1248507 , -1.56677908, -1.00870746, -0.45063583,
        0.10743579,  0.66550742,  1.22357904,  1.78165067,  2.33972229,
        2.89779391]), <a list of 10 Patch objects>)

2.2.指定参数的频次直方图

仔细琢磨一下其实会有一些疑问,这个图里面只有10个数据条,但是很显然1000个随机变量的取值显然不止10个。在默认情况下,hist函数会将所有的随机变量取值划分为10个取值范围,然后统计每个取值范围内的变量数,并绘就此图。

我们可以从程序结果看出,hist函数是有返回值的,返回的是一个2元元组,元组第一个ndarray对象是数据条的高度序列,元组第二个ndarray对象是每个数据条的边缘横坐标。

其实如果我们只想得到上述返回数据,而并不想画图,那么可以用下面的方法即可。

top Created with Sketch.