首页 > Matplotlib 阅读数:42

Matplotlib绘制散点图

散点图(Scatter Diagram)又称为散点分布图,是一种以一个变量为横坐标,以另一个变量为纵坐标,利用坐标点(散点)的分布形态反映变量间的统计关系的图形。散点图将序列显示为一组点,值由点在图表中的位置表示,类别由图表中的不同标记表示。散点图通常用于比较跨类别的聚合数据。

散点图可以提供以下两类关键信息:

1) 变量之间是否存在数值或数量的关联趋势,以及关联趋势是线性还是非线性的;

2) 如果有某一个点或者某几个点偏离大多数点,也就是离群值,通过散点图可以一目了然,从而可以进一步分析这些离群值是否可能在建模分析中对总体产生很大影响。

散点图通过散点的疏密程度和变化趋势表示变量的数量关系,如果有 3 个变量,并且自变量为分类变量,通过对点的形状或者点的颜色进行区分,即可了解这些变量之间的关系。

pyplot 中绘制散点图的函数为 scatter,其语法格式如下:

matplotlib.pyplot.scatter(x,y,s=None,c=None,marker=None,cmap=None,norm=None,
vmin=None,vmax=None,alpha=None,linewidths=None,verts=None,edgecolors=None,
hold=None,data=None,**kwargs)

函数中的主要参数说明如下:
  • x,y:接收 array。表示 x 轴和 y 轴对应的数据,无默认;
  • s:接收数值或者一维的 array。指定点的大小,若传入一维 array,则表示每个点的大小,默认为 None;
  • c:接收颜色或者一维的 array。指定点的颜色,若传入一维 array,则表示每个点的颜色,默认为 None;
  • marker:接收特定 string。表示绘制的点的类型,默认为 None;
  • alpha:接收 0~1 的小数。表示点的透明度,默认为 None。

【例 1】使用不同形状的点,绘制 2007—2016 年的全国就业人员、城镇就业人员和乡村就业人员的散点图。其中,全国就业人员(万人)用“o”圆圈形状的点表示,城镇就业人员(万人)用“x”形状的点表示,乡村就业人员(万人)用“v”形状的点表示。

其程序代码 test1.py 如下。
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
#导入数据
Emp_data= np.loadtxt('d:\data\Employedpopulation.csv',delimiter = ",",
                     usecols=(1,2,3,4,5,6,7,8,9,10),dtype=int)
# 设置Matplotlib正常显示中文和负号
plt.rcParams['font.sans-serif']=['SimHei']   # 用黑体显示中文
plt.rcParams['axes.unicode_minus']=False     # 正常显示负号

#创建一个绘图对象, 并设置对象的宽度和高度
plt.figure(figsize=(6, 4))
#绘制全部就业人员散点图
plt.scatter(Emp_data[0],Emp_data[1],marker='o')
#绘制城镇就业人员散点图
plt.scatter(Emp_data[0],Emp_data[2],marker='x')
#绘制乡村就业人员散点图
plt.scatter(Emp_data[0],Emp_data[3],marker='v')

plt.xlabel('年份')
plt.ylabel('人员(万人)')
plt.ylim((30000,80000))
plt.xlim(2006,2017)
plt.title("2007-2016年城镇、乡村和全部就业人员情况散点图")
#添加图例
plt.legend({'全部就业','城镇就业','乡村就业'})
plt.savefig('d:/data/Employedpopulation_s.png')
plt.show()

运行程序后,保存并显示散点图如图 1 所示。

2007—2016年就业人员情况散点图
图 1:2007—2016年就业人员情况散点图

从就业人员情况散点图可见,近10年来城镇就业人员的数量不断增加,而乡村就业人员的数量不断减少。2013 年以后,城镇就业人员的数量超过乡村就业人员的数量。