Python数据可视化学习笔记:第一章 关联图 第三节 使用Python绘制复杂散点图

前言

声明:这个系列的博文都是我自己学习所得的东西,秉承着每天进步一点点的理念进行学习,我参考的课程是《菊安酱与菜菜的Python机器学习可视化50图》,使用的Python版本为3.6.4。
今天学习的内容是复杂散点图的绘制,这里是对于之前多类别散点图绘制的升级,简单来说就是类别多到不能用纯手动来解决问题了。
在这里插入图片描述

复杂散点图分析

1.需要的原料:
(1)数据集X1和X2;
(2)类别的列表;
(3)类别的颜色。
2.导入数据并查看数据:数据为原博主提供的在线数据,我们查看一下该数据的相关情况,并确定横坐标和纵坐标。我们以面积和人口为最终的横坐标和纵坐标,其中’category’为标签的类别,'dot_size’为最终点的大小的参数。其余的就是不同的类别了。

datasets=pd.read_csv("http://raw.githubusercontent.com/selva86/datasets/master/midwest_filter.csv")#由原博主提供的在线数据集直接导入
#查看数据
watch_data1=datasets.head()
print(watch_data1)

watch_data2=datasets.columns
print(watch_data2)

在这里插入图片描述
3.准备标签(类别):此时需要知道我们有几类要表达的数据,并为后面循环做准备。可以看到去重后有14种类型。

#准备标签
watch_cat=datasets['category']
print(watch_cat)#查看原始标签

categories=np.unique(datasets['category'])#去掉重复项
print(categories)#查看去重后类别
print(len(categories))#查看有几个类别

在这里插入图片描述
4.颜色:面对这么多类别,我们不能再去手动输入颜色。这时候需要使用matplotlib库函数中的cm模块,可以查询到有很多光谱带,可以根据自己的情况选择。这里我们以tab10色带为例,进行简单的尝试,依然按照第一节中的数据进行操作。

#准备颜色
colorx=plt.cm.tab10(5.2)#从tab10色带中取出一个颜色

x1=np.random.randn(10)
x2=x1+x1**2-10
plt.scatter(x1,x2,s=50,c=colorx)

plt.show()

在这里插入图片描述
但是,结果中给出警告,提示要将表示颜色的数组升维,不然为什么不用一个单词表示这个颜色呢。那么,将上面的代码修改:

#准备颜色
colorx=plt.cm.tab10(5.2)#从tab10色带中取出一个颜色

x1=np.random.randn(10)
x2=x1+x1**2-10
plt.scatter(x1,x2,s=50,c=np.array(colorx).reshape(1,-1))

plt.show()

在这里插入图片描述
效果一样,但是警告消失了,到此为止,我们的准备阶段就结束了,接下来就是,生成复杂的散点图了。

绘制复杂散点图

1.我们按照上述的方法生成散点图,代码如下:

#4.复杂的图像生成

datasets=pd.read_csv("http://raw.githubusercontent.com/selva86/datasets/master/midwest_filter.csv")#由原博主提供的在线数据集直接导入
#查看数据
watch_data1=datasets.head()
#print(watch_data1)
watch_data2=datasets.columns
#print(watch_data2)
#准备标签
watch_cat=datasets['category']
#print(watch_cat)#查看原始标签

categories=np.unique(datasets['category'])#去掉重复项
#print(categories)#查看去重后类别
#print(len(categories))#查看有几个类别

#准备颜色
'''colorx=plt.cm.tab10(5.2)#从tab10色带中取出一个颜色

x1=np.random.randn(10)
x2=x1+x1**2-10
plt.scatter(x1,x2,s=50,c=np.array(colorx).reshape(1,-1))

plt.show()'''

#开始绘制复杂散点图
#我们需要循环和类别数目一样的次数,目前有14各类别
#我们用循环的i来生成小数,这样就可以生成不同的颜色
plt.figure(figsize=(16,10))#定义画布

for i in range (len(categories)):
	plt.scatter(datasets.loc[datasets["category"]==categories[i],"area"],datasets.loc[datasets["category"]==categories[i],"poptotal"],s=20,c=np.array(plt.cm.tab10(i/len(categories))).reshape(1,-1),label=categories[i])

plt.legend()
plt.show()

在这里插入图片描述
2.这时候我们已经得到了这样基本的散点图,当然还需要继续修饰:

plt.style.use('seaborn-whitegrid')#设定整体风格
sns.set_style("white")#设置背景
plt.figure(figsize=(16,10),dpi=120,facecolor='w',edgecolor='k')#定义画布,分辨率,背景,边框
#开始装饰
plt.gca().set(xlim=(0.0,0.12),ylim=(0,80000))#控制横纵坐标的范围
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.ylabel('Population',fontsize=22)
plt.xlabel('Area',fontsize=22)
plt.title("scatterplot of midwest Area vs Population",fontsize=22)
plt.legend(fontsize=12)
plt.show()

完整代码及效果

#Author:Albert(CSDN:一个跻身科研大浪的小白)
#Time:2020/03/24
#usage:散点图

import numpy as np #数学处理库
import pandas as pd #用于处理.csv excel html 文本等文件
import matplotlib as mpl #画图像的库
import matplotlib.pyplot as plt #画二维图像的库
import seaborn as sns #颜色库

#画散点图的函数plt.scatter()

'''#1.绘制一个简单的散点图:X1和X2之间的关系图

#定义数据
x1 = np.random.randn(10)#取10个随机数,其中random为随机数函数,randn为取的数是正态分布的数
x2 = x1+x1**2-10

#确定一个画布,当只有一个图可以不确定
plt.figure(figsize=(8,4))#第一条线是横的,第二条是竖的

#绘图
plt.scatter(x1,x2,s=20,c="blue",label="Positive")#(横纵坐标,点的尺寸大小,颜色,图例的名称可以不写)

#装饰图形
plt.legend()#显示图例

plt.show()#显示图形'''


'''#2.无图例,分类型变量,即存在有两种数据,两列X对应一列y的情况
x = np.random.randn(10,2)#10行2列的数据集
y = np.array([0,0,1,1,0,1,0,1,0,0])#类别:假设目前有两种类型的数据分别是0和1

plt.figure(figsize=(8,4))

plt.scatter(x[:,0],x[:,1],s=50,c=y)

plt.show()'''


'''#3.有图例,分类型变量,即存在有两种数据,两列X对应一列y的情况
x = np.random.randn(10,2)#10行2列的数据集
y = np.array([0,0,1,1,0,1,0,1,0,0])#类别:假设目前有两种类型的数据分别是0和1

plt.figure(figsize=(8,4))

#要想生成两个图例,就要循环,分别循环颜色和标签

colors = ["red","black"]
labels=["Zero","One"]

for i in range(x.shape[1]):
	plt.scatter(x[y==i,0],x[y==i,1],c=colors[i],label=labels[i])

#在标签中存在几种类别,我们就循环几次,一次画一个点
plt.legend()
plt.show()'''


#复杂的图像生成

datasets=pd.read_csv("http://raw.githubusercontent.com/selva86/datasets/master/midwest_filter.csv")#由原博主提供的在线数据集直接导入
#查看数据
watch_data1=datasets.head()
#print(watch_data1)
watch_data2=datasets.columns
#print(watch_data2)
#准备标签
watch_cat=datasets['category']
#print(watch_cat)#查看原始标签

categories=np.unique(datasets['category'])#去掉重复项
#print(categories)#查看去重后类别
#print(len(categories))#查看有几个类别

#准备颜色
'''colorx=plt.cm.tab10(5.2)#从tab10色带中取出一个颜色

x1=np.random.randn(10)
x2=x1+x1**2-10
plt.scatter(x1,x2,s=50,c=np.array(colorx).reshape(1,-1))

plt.show()'''

#开始绘制复杂散点图
#我们需要循环和类别数目一样的次数,目前有14各类别
#我们用循环的i来生成小数,这样就可以生成不同的颜色

#以下两个步骤可以去掉图例的边框
plt.style.use('seaborn-whitegrid')#设定整体风格
sns.set_style("white")#设置背景
plt.figure(figsize=(16,10),dpi=120,facecolor='w',edgecolor='k')#定义画布,分辨率,背景,边框

for i in range (len(categories)):
	plt.scatter(datasets.loc[datasets["category"]==categories[i],"area"],datasets.loc[datasets["category"]==categories[i],"poptotal"],s=20,c=np.array(plt.cm.tab10(i/len(categories))).reshape(1,-1),label=categories[i])

#开始装饰
plt.gca().set(xlim=(0.0,0.12),ylim=(0,80000))#控制横纵坐标的范围
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)
plt.ylabel('Population',fontsize=22)
plt.xlabel('Area',fontsize=22)
plt.title("scatterplot of midwest Area vs Population",fontsize=22)
plt.legend(fontsize=12)
plt.show()

在这里插入图片描述

下节预告

下节将尝试其他格式数据的生成。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值