1. 散点图
散点图用于查看两个变量之间的关系,
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
data = pd.read_excel('data.xlsx')
change = data.Open - data.Close
x = change[:-1]
y = change[1:]
plt.scatter(x, y)
plt.show()
1.1 常用参数
- c: 颜色
- s:大小
- marker:点的形状
- alpha:点的透明度
plt.scatter(x, y, c='r', s=30, marker='^', alpha=0.4)
plt.show()
2. 进阶图
2.1 气泡图
气泡图常用于展示3个变量间的关系。在上一节中介绍了scatter中的s参数可以控制点的大小,由于它可以传入一个数组,这样就能让不同的点有不同的大小,利用s的这个特点就能实现气泡图:
import numpy as np
x = np.arange(1,10)
y = np.random.randint(1, 10, size=9)
size = np.exp(x)
plt.scatter(x, y, c='r', s=size, marker='o', alpha=0.3)
如上图所示,各点的大小随着横轴的增加增加,在处理实际问题时,传入s的数组的值尽量要大一点,不然点大小的差距不明显。
2.2 边缘直方图
本文的一开始就介绍散点图可以用来探索变量间的关系,那么我们在使用散点图的同时能不能页观察单个变量的特征呢?答案是可以的,我们可以使用边缘直方图在散点图的边缘实现单个变量的直方图:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# 为了美观我们使用ggplot的绘图风格
plt.style.use('ggplot')
# 随机生成数据
x = np.random.randn(200)
y = x + np.random.randn(200) * 0.5
# 创建一个大小为16*12画板,并把画板分解成16块
fig = plt.figure(figsize=(16, 12))
grid = plt.GridSpec(4, 5, hspace=0.3, wspace=0.2)
# 左上九个格子为主图(散点图)的区域
axScatter = fig.add_subplot(grid[:-1, :-1])
# 最右一行的前3个格子为横轴变量的直方图的区域
axHistX = fig.add_subplot(grid[-1, 0:-1], xticklabels=[], yticklabels=[])
# 最右一列的前3个格子为纵轴变量的直方图的区域
axHistY = fig.add_subplot(grid[:-1, -1], xticklabels=[], yticklabels=[])
# 散点图绘制
axScatter.scatter(x, y)
# 横轴直方图
axHistX.hist(x, 40, orientation='vertical')
axHistX.invert_yaxis()
# 纵轴直方图
axHistY.hist(y, 40, orientation='horizontal')
# 标题
axScatter.set(title='Scatter', xlabel='X', ylabel='Y')
# 标题字体大小
axScatter.title.set_fontsize(20)
plt.show()
画这个边缘直方图使用了matplotlib中的GridSpec方法,该方法主要是可以将画布进行裁剪。