一、散点图引入
什么是散点图?
反映两组变量每个数据点的值,并且从散点图可以看出它们之间的相关性。单看概念可能不太好理解,我们可以从一个例子说起。下面我们通过例子边学边做。
在做散点图之前,最重要的是我们得有数据啊,数据很重要。这里我们利用关于karate--deepwalk.embeddings的数据,假设存储在目录C:\Users\WBL\Desktop\DeepWalk\karate--deepwalk.embeddings.csv中,数据全文为
label | x | y |
34 | -0.60476 | -0.71091 |
1 | 0.311671 | -0.88602 |
33 | -0.7206 | -0.72734 |
3 | -0.12409 | -0.77231 |
2 | 0.284264 | -0.8668 |
4 | 0.273538 | -0.86838 |
32 | -0.4155 | -0.74076 |
14 | 0.066654 | -0.81539 |
24 | -0.80765 | -0.69245 |
9 | -0.23795 | -0.74187 |
6 | 0.801222 | -1.01542 |
7 | 1.02443 | -1.12159 |
28 | -0.63256 | -0.71611 |
30 | -0.89666 | -0.69355 |
8 | 0.081434 | -0.81575 |
31 | -0.39702 | -0.72797 |
25 | -0.83234 | -0.69107 |
5 | 0.805114 | -1.02388 |
20 | -0.0225 | -0.80833 |
26 | -0.78295 | -0.70043 |
11 | 0.776621 | -1.00543 |
29 | -0.41022 | -0.7247 |
17 | 1.083 | -1.10963 |
19 | -0.83465 | -0.70858 |
15 | -0.75736 | -0.69438 |
13 | 0.340806 | -0.87363 |
10 | -0.44032 | -0.72752 |
22 | 0.422973 | -0.90371 |
21 | -0.78695 | -0.69475 |
27 | -0.9448 | -0.66912 |
16 | -0.75029 | -0.69804 |
18 | 0.382226 | -0.90165 |
23 | -0.78915 | -0.73798 |
12 | 0.563045 | -0.94381 |
首先要将数据读取进来,大致对数据进行浏览,看以下代码:
import pandas as pd
import matplotlib.pyplot as plt
df=pd.read_csv(r"C:\Users\WBL\Desktop\DeepWalk\karate--deepwalk.embeddings.csv") ---r为转义字符
print(df.head())
输出为:
label x y
0 34 -0.604761 -0.710905
1 1 0.311671 -0.886024
2 33 -0.720595 -0.727339
3 3 -0.124094 -0.772308
4 2 0.284264 -0.866799
df.head()默认返回数据集的前五行数据,浏览以下数据集的所有属性,以及取值如何,这里我们先拿“x”和“y”来做实例以理解散点图。当然,你也可以用其他属性。
plt.scatter(df["x"],df["y"])
plt.show()
完善的散点的图是怎样的,它需要哪些参数呢?
首先要 生成一个figure对象和一个坐标系(理解为子图也可以)axes对象,并且创建一个图形区域宽和高的比例为8:5(可以自行设置),分辨率为每英寸80像素的图,还有fontsize则是字体的大小(可自行设置)
上例子及代码中可以看到,我们在绘制散点图时候,用到了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个变量的关系时,需要加入连续型变量作为第三维度。
而c代表的是点的填充颜色,可以参考文档设置定值来填充不同的颜色。这里我们还利用该数据集的一个“vs”特征来作为第三维度,通过的“vs”的观察可以看出vs只有两个不同的取值0和1。我们就用“vs”的值来作为c的值,以此来查看数据的分步情况:
但是我们发现好像缺了点什么:我们不知道黄色代表什么值,紫色代表什么值,对吧?因此我们需要添加1个图例来表明每个颜色代表的是什么数据,思路是因为vs只有0,1两种值,那么我只需要提取出满足vs==0的数据(mpg和wt)和满足vs==1的数据(mpg和wt),然后在1张图上用2套数据源画2种颜色的散点图即可:
# -- coding: utf-8 import pandas as pd import matplotlib.pyplot as plt df=pd.read_csv(r"C:\Users\WBL\Desktop\DeepWalk\karate--deepwalk.embeddings.csv") # r为转义字符 # print(df.head()) # plt.scatter(df["x"],df["y"]) # plt.show() fig,ax = plt.subplots(figsize = (8,5),dpi = 70) #figsize:宽和高比例,dpi:分辨率 ax.scatter(df["x"],df["y"],alpha=1,c=df["label"]) #制作关于x,y的散点图 ax.set_xlabel("x",fontsize=15) ax.set_ylabel("y",fontsize=15) ax.set_title("karate--deepwalk.embeddings",fontsize=20) # ax.set_xlim(1.5,1.5) #x轴调整取值范围 # ax.set_ylim(-1.5,0) plt.show()