Python数据可视化之散点图(进阶篇---图文并茂详细版!!!)

Posted 温柔且上进c

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python数据可视化之散点图(进阶篇---图文并茂详细版!!!)相关的知识,希望对你有一定的参考价值。

数据获取

       •进阶散点图可视化需要大量的数据,网上有很多获取数据的来源,在这里我们可以从GitHub中获取我们想要的数据!!!
       •数据来源GitHub:https://github.com/selva86/datasets
在这里插入图片描述

       •GitHub是国外网站,可能因为网速慢导致下载失败,一可以百度解决下载问题,二可以评论留言,博主会私信发给完整的数据集!!!
       •将上述链接的整个数据集下载下来,数据集中有很多我们可以练习的数据类,我们从中选择一个数据类进行散点图的演示!!

数据展示

       •数据集下载完成后,解压,在文件目录中找到下图中的csv数据文件
在这里插入图片描述
       •上述的csv文件数据为:美国中西部地区人口分布详细数据,我们对此数据进行分析!!!

在这里插入图片描述
       •图中所示,大量的数据已满足我们可视化散点图的需求!!!

数据分析

1.确定横纵坐标的选择

       •首先分析数据表中的特征值关系,我们需要研究总人口与面积的关系!!
在这里插入图片描述
       •上述表中特征值意思为:
       •[“城市ID”, “郡”,“州",“面积",“总人口”,“人口密度","白人人口”,"非裔人口”,“美洲印第安人人口”,"亚洲人口”,"其他人种人口”,“白人所占比例”,“非裔所占比例”,“美洲印第安人所占比例”,“亚洲人所占比例”,“其他人种比例”“成年人口”,“具有高中文凭的比率”,“大学文凭比例”,“有工作的人群比例”“已知贫困人口”,“已知贫困人口的比例”,“贫困线以下的人的比例”,“贫困线以下的儿童所占比例”,“贫困的成年人所占的比例”,“贫困的老年人所占的比例”,“是否拥有地铁”,“标签”,“点的尺寸”]
       •红色圈出的两个特征值是需要使用的关系特征值,即为我们所需的横纵坐标!!

2.准备标签的列表与颜色

       •首先要提取标签中不重复的值,观察一共有多少中标签,即确定我们需要多少中颜色!!

import numpy as np
import 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 plt
import numpy as np

color1 = 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时,不会报错,但会出现下图警告!!!解决方法解释参考博文,此博文也是博主自己写的,可详细理解:解决警告:c argument looks like a single numeric RGB or RGBA sequence, which should be avoi(图文并茂详细版!!!)
在这里插入图片描述

4.确定横纵坐标的值

       •使用循环取出不同标签的横纵坐标,(面积,总人口)

import numpy as np
import 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)

在这里插入图片描述

       •如上图所示:即为成功取出所需横,纵坐标!!

5.绘制基础图像

       •将上述代码融合可得:

import matplotlib.pyplot as plt
import numpy as np
import 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 plt
import numpy as np
import 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()  # 显示图像

       •上述的两个代码块的图像都为下图:
在这里插入图片描述
       •由上述绘制的图片可以看出:仅有少许发达城市为面积小,人口多,也有右上角的特殊点面积非常大,人口非常多,但是大部分城市的面积与人口是称相似正比的
       •出现上述图像即为绘制成功,在应对以后多个标签类型时,即可游刃有余的处理图像!!!

以上是关于Python数据可视化之散点图(进阶篇---图文并茂详细版!!!)的主要内容,如果未能解决你的问题,请参考以下文章

R语言数据可视化之散点图

数字的可视化:python画图之散点图sactter函数详解

数字孪生|可视化图表之散点图

数据可视化 | 基础图表应用之散点图

Python数据可视化之绘制带有最佳拟合线的散点图(图文并茂版!!!)

R语言学习——图形初阶之散点图