matplotlib——散点图

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/skldecsdn/article/details/79611551

一、散点图引入
什么是散点图?
反映两组变量每个数据点的值,并且从散点图可以看出它们之间的相关性。单看概念可能不太好理解,我们可以从一个例子说起。下面我们通过例子边学边做。
在做散点图之前,最重要的是我们得有数据啊,数据很重要。这里我们利用关于()的数据集,”mtcars.csv“,那么首先要将数据读取进来,大致对数据进行浏览,看以下代码:
这里写图片描述
df.head()默认返回数据集的前五行数据,浏览以下数据集的所有属性,以及取值如何,这里我们先拿”mpg”和“wt”来做实例以理解散点图。当然,你也可以用其他属性。解释下“mpg” :每加仑的英里数(国外的单位),”wt”为车重,简单引入散点图,看例子:
这里写图片描述
通过此图,大致可以看出”mpg”和”wt”是成负相关的关系,”wt”越大,则”mpg”越小。这是我们通过散点图可以得到的信息。好像此图不是很完善,我们来看下完善的散点的图是怎样的,它需要哪些参数呢?
我们用的是面向对象作图方式,上篇文章中有讲过。也推荐用这种方法,更有逻辑思路更清晰。在这里首先要 生成一个figure对象和一个坐标系(理解为子图也可以)axes对象,并且创建一个图形区域长和宽的比例为8:5(可以自行设置),分辨率为每英寸80像素的图,还有fontsize则是字体的大小(可自行设置)。具体我们还是看代码更加直接,代码中以添加注释,方便日后复习。
这里写图片描述
好了,以上便是较为完整的散点图绘制过程,此时,更加清楚的看到这幅图是描绘了汽车的每加仑英里数(mpg)和车重(wt)的关系(ax.set_title(“The relationship of mpg and wt”,fontsize=16)),横轴代表了每加仑英里数(mpg),纵轴代表了车重(wt)。而每个点对应了一辆车的每加仑英里数和车重,代表了一个样本。深入解读:我们可以看到,每加仑英里数(mpg)越大,车重(wt)越小,说明每加仑英里数和车重是负相关关系。这些就是我们通过散点图的得到的信息,如若不绘制图,你能从一排排数据中快速得到这些信息吗?答案NO!!!
二、散点图绘制
以上例子及代码中可以看到,我们在绘制散点图时候,用到了ax.scatter(df[“mpg”],df[“wt”])函数,关于scatter()函数看下都有哪些参数:ax.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, , data=None, *kwargs)
其中的x和y在上面我们的例子中应该就已经理解了,而s代表了点的大小,如果s输入的是一个固定值,那么就只是单纯的改变散点的大小(可以自己设置),这里我们增加一些知识,如果让点的大小也成为一个维度,这样的话就可以表示三个维度数据之间的联系,先看示例:

这里写图片描述
这个图相比一般散点图多了一个维度的数据,即将第三个维度的数据大小(这里是数据集中的“disp”)以气泡(参数alpha表示透明度,可以自行设置)大小示意。像这样需要第三个维度的应用场景为:在研究2个变量的关系时,需要加入连续型变量作为第三维度。
我们就来设置一下s为固定值时,同时含有透明度(气泡效果)的示例图:
这里写图片描述
而c代表的是点的填充颜色,可以参考文档设置定值来填充不同的颜色。这里我们还利用该数据集的一个“vs”特征来作为第三维度,通过的“vs”的观察可以看出vs只有两个不同的取值0和1。我们就用“vs”的值来作为c的值,以此来查看数据的分步情况:
这里写图片描述
但是我们发现好像缺了点什么:我们不知道黄色代表什么值,紫色代表什么值,对吧?因此我们需要添加1个图例来表明每个颜色代表的是什么数据,思路是因为vs只有0,1两种值,那么我只需要提取出满足vs==0的数据(mpg和wt)和满足vs==1的数据(mpg和wt),然后在1张图上用2套数据源画2种颜色的散点图即可:
这里写图片描述
这里写图片描述
但是又有个问题,我们的数据集中”vs”值只有两个,如果vs有很多个值怎么办,难道要一个个提取出来?所以更智能的做法是:首先搞清楚”vs”的取值情况,有几个不同的取值,也就是得到vs的唯一值(.unique()函数),然后给每一个值分配一种颜色,创建一个与vs唯一值配对的颜色列表。将vs唯一值的序列改造成一个带索引的序列,针对这个索引序列写个循环,将vs的每个唯一取值和对应的索引给遍历过去,提取出对应的x和y。最后根据索引匹配颜色列表,根据序列的值建立标签label,这样就可以智能化地画出带分类图例的散点图啦!
还拿我们以上的数据集,同样按照”vs”的两个唯一值0和1的情况下,更智能的做法如下(可以与上面讲的比较容易理解的方法进行比对加深印象):
创建循环,因为有两个唯一值,所以取i=0和1来控制循环。第一次循环:i=0,v=0,x为vs==0时取出的mpg值,y为vs==0时取出的wt值。第二次循环:i=1,v=1,x为vs==1时取出的mpg值,y为vs==1时取出wt值。
这里写图片描述
为了对上面enumerate( )函数的理解,特写以下代码,希望可以完全理解代码:
这里写图片描述
这里写图片描述
在上面的例子里涉及到了一个参数c,用于点的颜色设置,如果c输入的是一个固定值,那么就只是单纯的改变散点的颜色,不具备维度。如下:
这里写图片描述
如果你希望设置一些自己想要的颜色,可以用RGB的方式来调色(打开qq截图将鼠标箭头放在页面任意一个彩色图片的位置,你会看到右下角小方框下方有RGB数字):
这里写图片描述
还有一常用的参数:marker (点的形状),该参数的值可参照官方文档自行设置。
这里写图片描述
参数edgecolors:点的边界颜色
到这里,基本画散点图的函数方法已经介绍完了,剩下的也只是对于参数的赋值。
这里写图片描述
四、画多个散点图
1.在一张图里画多个散点图
这里写图片描述
2.在多张图里画散点图
这里写图片描述
这里写图片描述
五、散点矩阵

应用场景:了解数据集中各个数值列之间的关系
这里写图片描述
这里写图片描述

展开阅读全文

没有更多推荐了,返回首页