本文共 3182 字,大约阅读时间需要 10 分钟。
•进阶散点图可视化需要大量的数据,网上有很多获取数据的来源,在这里我们可以从GitHub中获取我们想要的数据!!!
•数据来源GitHub:•GitHub是国外网站,可能因为网速慢导致下载失败,一可以百度解决下载问题,二可以评论留言,博主会私信发给完整的数据集!!!
•将上述链接的整个数据集下载下来,数据集中有很多我们可以练习的数据类,我们从中选择一个数据类进行散点图的演示!!•数据集下载完成后,解压,在文件目录中找到下图中的csv数据文件
•上述的csv文件数据为:美国中西部地区人口分布详细数据,我们对此数据进行分析!!! •图中所示,大量的数据已满足我们可视化散点图的需求!!!•首先分析数据表中的特征值关系,我们需要研究总人口与面积的关系!!
•上述表中特征值意思为: •[“城市ID”, “郡”,“州",“面积",“总人口”,
“人口密度","白人人口”,"非裔人口”,“美洲印第安人人口”,"亚洲人口”,"其他人种人口”,“白人所占比例”,“非裔所占比例”,“美洲印第安人所占比例”,“亚洲人所占比例”,“其他人种比例”“成年人口”,“具有高中文凭的比率”,“大学文凭比例”,“有工作的人群比例”“已知贫困人口”,“已知贫困人口的比例”,“贫困线以下的人的比例”,“贫困线以下的儿童所占比例”,“贫困的成年人所占的比例”,“贫困的老年人所占的比例”,“是否拥有地铁”,“标签”,“点的尺寸”] •红色圈出的两个特征值是需要使用的关系特征值,即为我们所需的横纵坐标!! •首先要提取标签中不重复的值,观察一共有多少中标签,即确定我们需要多少中颜色!!
import numpy as npimport pandas as pd# 导入数据midwest = pd.read_csv(r'D:\9\midwest_filter.csv')# 提取标签中不重复类别categories = np.unique(midwest['category']) # 使用unique去除重复项print(categories)•上述图中有14个不重复的标签,即我们需要14种不重复颜色!! •对于这14种不同颜色我们可以选择matplotlib中的十号光谱,自动生成14中不同颜色!! 举例:代码演示tab10生成不同颜色:
import matplotlib.pyplot as pltimport numpy as npcolor1 = plt.cm.tab10(5.2) # tab(10)括号中输入随机数,生成颜色x = np.random.rand(10) # 生成十个随机数y = x + x ** 2 - 10 # 函数关系确定y的值plt.scatter(x, y, c=np.array(color1).reshape(1, -1))plt.show() # 显示图像•当你在代码中直接使用color1时,不会报错,但会出现下图警告!!!解决方法解释参考博文,此博文也是博主自己写的,可详细理解:
•使用循环取出不同标签的横纵坐标,(面积,总人口)
import numpy as npimport pandas as pd# 导入数据midwest = pd.read_csv(r'D:\9\midwest_filter.csv')# 提取标签中不重复类别categories = np.unique(midwest['category']) # 使用unique去除重复项for i in range(len(categories)): area = midwest.loc[midwest['category'] == categories[i], 'area'] # 横坐标 poptoal = midwest.loc[midwest['category'] == categories[i], 'poptotal'] # 纵坐标 print(area) print(poptoal)
•如上图所示:即为成功取出所需横,纵坐标!!
•将上述代码融合可得:
import matplotlib.pyplot as pltimport numpy as npimport pandas as pd# 导入数据midwest = pd.read_csv(r'D:\9\midwest_filter.csv')# 提取标签中不重复类别categories = np.unique(midwest['category']) # 使用unique去除重复项plt.figure(figsize=(16, 10))for i in range(len(categories)): plt.scatter(midwest.loc[midwest['category'] == categories[i], 'area'] # 横坐标 , midwest.loc[midwest['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() # 显示图像
•将上述代码优化(效果相同!!)
import matplotlib.pyplot as pltimport numpy as npimport pandas as pd# 导入数据midwest = pd.read_csv(r'D:\9\midwest_filter.csv')# 准备标签列表与颜色列表categories = np.unique(midwest['category'])colors = [plt.cm.tab10(i / float(len(categories) - 1)) for i in range(len(categories))]plt.figure(figsize=(16, 10))for i, category in enumerate(categories): # i 为索引 category为特征 plt.scatter('area', 'poptotal', data=midwest.loc[midwest.category == category, :] , s=20 # 点的大小 , c=np.array(colors[i]).reshape(1, -1) # 点的颜色 , label=str(category)) # 标签plt.legend() # 显示图例(标签)plt.show() # 显示图像
•上述的两个代码块的图像都为下图:
•由上述绘制的图片可以看出:仅有少许发达城市为面积小,人口多,也有右上角的特殊点面积非常大,人口非常多,但是大部分城市的面积与人口是称相似正比的 •出现上述图像即为绘制成功,在应对以后多个标签类型时,即可游刃有余的处理图像!!!转载地址:http://ayrzi.baihongyu.com/