散点图
导包
1 import numpy as np 2 import pandas as pd 3 import matplotlib as mpl 4 import matplotlib.pyplot as plt 5 import seaborn as sns
二维图(一个标签)
X1是10个随机数,满足正态分布,y与X1线性相关。
1 X1=np.random.randn(10) 2 y=X1+X1**2-3
1 # 确定画布尺寸 2 plt.figure(figsize=(8,4)) 3 # 绘图 4 plt.scatter(X1,y,s=50,c='red',label='Positive') #s是点的大小 5 #显示label 6 plt.legend()
效果图如下.
图1-1 X1与y的图形
二维图(两个标签)
X1是一个二维数组,10行2列。我将X1的第一列数据作为X轴,X1的第二列数据作为Y轴,一共可绘制除10个点。10个点分为两类,类别对应数组cate,0为一类,1为一类.
1 X1=np.random.randn(10,2) 2 cate=[0,1,1,1,0,1,1,0,0,1] 3 plt.scatter(X1[:,0],X1[:,1],s=20,c=cate)
图形绘制如下.
图 1-2 X1[:,0]与X1[:,1]对应关系
由图可知,虽然已经画出了十个点,并且分为了两类,但是并没有显示两个label.scatter里面的label属性只能填一个值,不能填多个值或是传入数组.为了显示对应的图例,我们
需要借助循环.为了方便说明,我先将所有分类列举出来。
我们通过y==0和y==1筛选出两个类型的数据,然后利用将x和y的数据分开,最后给不同类别添上不同的颜色和标签名。
1 plt.scatter(X1[y==0,0],X1[y==0,1],s=20,c='r',label='zero') 2 plt.legend()
1 plt.scatter(X1[y==0,0],X1[y==0,1],s=20,c='r',label='zero') 2 plt.scatter(X1[y==1,0],X1[y==1,1],s=20,c='g',label='one') 3 plt.legend()
图1-3 zero类的数据散点图 图1-4 zero类和one类的数据散点图
借助for循环画图
1 colors=['blue','green'] 2 labels=['good','bad'] 3 for i in range(2): 4 plt.scatter(X1[y==i,0],X1[y==i,1],c=colors[i],label=labels[i]) 5 plt.legend()
图 1-5 for循环实现散点图
二维图(多个标签)
查看某个特征里的所有取值,以及取值个数
1 uniq=np.unique(data['category']) 2 len(uniq)
图 2-1 特征category取无重复值个数 图2-2 特征category共能取14种值
由图可知,我们会使用到始终不同的颜色去渲染图表,这里我们可以使用plt给我们提供的光谱。
1 color=plt.cm.tab10(5.2) 2 # 每一个浮点数代表一种颜色
图2-3 color对应颜色的rgba
我们规定横坐标为特征area,纵坐标为特征poptoral,一共分为14类。
循环次数是类别个数,x轴是对应类别的area特征,y轴是对应类别的poptotal特征,我们颜色借助了光谱,在导入颜色时要将颜色数据转换成二维数组。
1 for i in range(len(cate)):
plt.scatter(data.loc[data.category==cate[i],'area'],data.loc[data.category==cate[i],'poptotal'],s=20,c=np.array(plt.cm.tab10(i/len(cate))).reshape(1,-1),label=cate[i]) 2 plt.legend()
图 2-4 area和poptotal散点图