直方图
直方图可以帮助我们直观地发现数据在不同区间的分布和集中情况。下面,我们就先来学习一下 Matplotlib 直方图的绘制~
首先,导入工具包并执行魔法指令:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
绘制直方图,除了需要传递数据之外,还需要我们设置一个 bins ,即区间的划分:
data = np.random.normal(0,10,1000)
bins = np.arange(np.min(data),np.max(data)+1,5)
plt.hist(data,bins=bins)
绘制结果:
此外,我们还可以在一张图中绘制两组数据的直方图,可以进行对比分析:
import random
data1 = np.random.normal(0,10,1000)
data2 = np.random.normal(10,20,1000)
bins1 = np.arange(np.min(data1),np.max(data1)+1,5)
bins2 = np.arange(np.min(data2),np.max(data2)+1,5)
plt.hist(data1,bins=bins1,label='bins 1',alpha=0.6)
plt.hist(data2,bins=bins2,label='bins 2',alpha=0.6)
plt.legend(loc='best')
这里除了使用 plt.legend(loc='best')
添加了图注之外,在 plt.hist
绘制直方图时,我们设置了透明度 alpha=0.6
,这样重叠的区间也可区分出两组数据了~
散点图
使用 plt.scatter
即可绘制散点图:
x1 = np.random.randint(10,size=(2,50))
x2 = np.random.randint(5,15,size=(2,50))
x3 = np.random.randint(10,15,size=(2,50))
plt.scatter(x1[0],x1[1],marker ='x',alpha=0.5,label='x1')
plt.scatter(x2[0],x2[1],marker ='o',alpha=0.5,label='x2')
plt.scatter(x3[0],x3[1],marker ='^',alpha=0.5,label='x3')
plt.legend(loc='best')
其中数据集 x1
x2
x3
都是二维的矩阵,在绘制散点图时我们将第一个维度的值作为横坐标,第二个维度的值作为纵坐标。
绘制结果:
上述,无论是散点图还是直方图,在一个坐标系绘制多组数据时,Matplotlib 都会自动为我们指定颜色,还是很方便的。我们只需要添加图注即可~
下面,我们来给散点图标注点的坐标~首先,绘制一个简单的散点图:
X = np.around(np.random.random_sample(size=(2,5)), decimals=1)
plt.figure(figsize=(8,6))
plt.scatter(X[0], X[1], marker='s', s=50)
绘制结果:
使用 annotate
在坐标系中添加注释:
plt.figure(figsize=(10,8))
plt.scatter(X[0], X[1], marker='s', s=50)
for x,y in zip(X[0],X[1]):
plt.annotate(f'({x},{y})', xytext=(0,-15), xy=(x,y), textcoords='offset points', ha='center')