Python可视化图系列(1)-----jupyter notebook

2023-11-10

Python可视化-----复杂的散点图


前言

提示:00 安装库,配置环境
在Python中进行可视化,我们需要的是这些库:

matplotlib:python中自带的,也是最常用的可视化工具包,在Jupyter中甚至可以找到matplotlib的网站。
seaborn:python中可视化的新起之秀,致力于统计数据可视化。
brewer2mpl:brewer2mpl是一个专供python使用的,用于访问colorbrewer2色谱的工具,colorbrewer2是一个专业颜色顾问公司。

matplotlib
通常来说,如果我们是使用anaconda安装的python,那matplotlib是自带的
如果你发现你的python环境中没有matplotlib,那你可以使用以下命令先安装pip,然后从pip中安装matplotlib:
下面展示安装代码

python -m pip install -U pip
python -m pip install -U matplotlib

你可以通过在Jupyter中运行 print(matplotlib.version) 来查看你现有的matplotlib版本。
下面展示运行代码

import matplotlib as mlp
print(mlp.__version__)

seaborn是需要自己安装的。如果不是anaconda自带,建议使用pip安装。

#%%cmd
#pip install seaborn
import seaborn as sns
print(sns.__version__)

seaborn要求必须0.9.0以上,否则代码会报错,不足0.9.0的大家可以使用以下代码进行升级。
下面展示相关代码

#%%cmd
#pip install --upgrade seaborn

brewer2mpl
同样也需要自己安装,使用以下代码:

#%%cmd
#pip install brewer2mpl

不必过于在意版本,通常来说都是直接安装成最新版。


提示:以下是本篇文章正文内容,下面案例可供参考

一、我们的目标是什么?

我们的目标是:绘制出下图,并且利用数据解读图内的信息。
横坐标:面积大小总坐标:总人口图例:暂时看不出是什么总而言之看起来是类型,一种类型一个颜色

二、实现目标的知识准备

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#如果你在使用Jupyter Notebook,你会需要这样一句命令来让你的图像显示

2.导入数据

代码如下(示例):

#导入数据
midwest = pd.read_csv("https://raw.githubusercontent.com/selva86/datasets/master/midwest_filter.csv")
midwest.head()

该处使用的url网络请求的数据。


3.准备标签的列表和颜色

代码如下(示例):

#(1)标签
midwest['category']
#提取标签中的类别
categories = np.unique(midwest['category']) #去掉所有重复的项
categories #这就是我们要使用的标签的类别列表

颜色

接下来要创造和标签的类别一样多的颜色,如果只有三四个类别,或许我们还可以自己写,然而面对十几个,或者二十个分类,我们需要让matplotlib来帮助我们自动生成颜色。

plt.cm.tab10()

用于创建颜色的十号光谱,在matplotlib中,有众多光谱供我们选择:https://matplotlib.org/tutorials/colors/colormaps.html
我们可以在plt.cm.tab10()中输入任意浮点数,来提取出一种颜色。光谱tab10中总共只有十种颜色,如果输入的浮点数比较接近,会返回类似的颜色。这种颜色会以元祖的形式返回,表示为四个浮点数组成的RGBA色彩空间或者三个浮点数组成的RGB色彩空间中的随机色彩。
代码如下(示例):

#(2)颜色
color1 = plt.cm.tab10(5.2)
color1 #四个浮点数组成的一个颜色
np.array(color1).reshape(1,-1) #reshape:增维,输入(1,-1)是让行上的维度为1(-1,1)是让列上的维度为1
x1 = np.random.randn(10)
x2 = x1 + x1**2 - 10
plt.scatter(x1,x2,s=50
            ,c=np.array(color1).reshape(1,-1))
plt.show()

三、画目标图片(复杂的散点图)

至此已经阐述完怎样找数据、标签、颜色,现在开始画图。
代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
#如果你在使用Jupyter Notebook,你会需要这样一句命令来让你的图像显示
midwest.head()
categories[13] #0~13,通过索引提取标签类别
midwest.loc[midwest["category"] == categories[0],"poptotal"].head()
#为了标签的名称,我们本来就需要循环和标签的类别数目一样的次数
#所以需要循环的次数 = 需要生成的颜色的次数 = 需要生成的小数的个数
#只需要在循环中不断生成颜色就好了
#所以我们可以利用循环中的i来生成14个不同的小数

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)    #i除以固定的数,来获得小数
                ,label=categories[i]
               )
plt.legend()
plt.show()

四、解读图像

解析标签的含义:第一个字母是平均教育程度的高低(越高的话,我们的标签就是H)
第二个字母是贫困水平的高低(越穷的话,我们的水平就是H)
第三个字母是城市还是乡村
基于标签含义的解析,我们对于图可以分析出什么呢?
代码如下(示例):

midwest["category"].value_counts()
plt.figure(figsize=(16, 10)   #绘图尺寸
           , dpi=60           #图像分辨率
           , facecolor='w'    #图像的背景颜色,设置为白色,默认也是白色
           , edgecolor='k'    #图像的边框颜色,设置为黑色,默认也是黑色
          )

#进行循环绘图
for i, category in enumerate(categories):
    plt.scatter('area', 'poptotal', 
                data=midwest.loc[midwest.category==category, :],
                s=20, c=np.array(plt.cm.tab10(i/float(len(categories)-1))).reshape(1,-1),label=str(category))

#高学历,低贫困的地方
plt.scatter("area","poptotal",
           data = midwest.loc[midwest.category == "HLU",:],
            s=300,
            facecolors="None",
            edgecolors="red",
            label = "Selected")

#低学历,很贫困的地方
#plt.scatter("area","poptotal",
#           data = midwest.loc[midwest.category == "LHR",:],
#            s=150,
#            facecolors="None", #点的填充颜色,为None的时候,表示点是透明的
#            edgecolors="red", #点的边框现在是红色
#           label = "Selected")

#再试试看,高学历,高贫困的地方?
#学历低,但很富有的地方?

#对图像进行装饰
plt.gca().set(xlim=(0.0, 0.12), ylim=(0, 90000)) #控制横纵坐标的范围
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()

输出展示:
在这里插入图片描述

总结

我们什么时候会需要散点图呢?
数据报告 & 学术研究:
展示趋势:比如产品销量随着时间如何变化,智力水平随着教育程度如何变化等
展现状态:不同年龄的客户的成交率,不同生产成本对应的生产员工技能要求

数据探索 & 数据解读:
探索数据关系,帮助了解事实,推动研究

统计学 & 机器学习:
探索数据关系,指导数据预处理和模型选择

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python可视化图系列(1)-----jupyter notebook 的相关文章

随机推荐

  • 事务并发问题及事务隔离级别的学习

    以下内容都是看的咕泡学院的大神老师讲的一个公开课 就是记录一下 事务并发带来的三大问题 1 脏读 如下图 左右两个事务A B 事务A首先查询id 1的数据 得到age 16之后 事务B对id 1的数据 将age 16更新为age 18 然后
  • STM32驱动步进电机(原理、程序、解决电机只震动不转动问题)

    一 步进电机的介绍 首先来看一下步进电机的样子 本介绍采用平时最常见也是最简单的28BYJ 48 这是一个五线四项电机 五线 顾名思义 外部五条线 四项 电机内部的定子上有8个齿 正对着的2个齿上的绕组又是串联在一起的 也就是说正对着的2个
  • STM32CUBE 定时器使用

    目录 STM32F407VET6 定时中断 记录各个STM32型号的定时器使用方法 包括定时中断 输入捕获等功能 持续更新 STM32F407VET6 定时中断 时钟配置 这里主频配置为100Mhz 最高168Mhz 即HCLK 100MH
  • [用python辅助学生中考与高考-1]:家长篇-科技特长生概述与优势

    目录 前言 这是科技的最好时代 1 什么是科技特长生 2 科技特长生的优势 科技特长生录取方式 3 科技特长生的类型 4 科技特长生七大招生类目 5 如何成为科技特长生 6 常见的赛事 前言 这是科技的最好时代 随着国家强基计划的出台和国际
  • java编程之java jwt token什么是JWT?(一)

    转自 http www leftso com blog 220 html 一 什么是JWT 了解JWT 认知JWT 首先jwt其实是三个英语单词JSON Web Token的缩写 通过全名你可能就有一个基本的认知了 token一般都是用来认
  • 房屋租赁系统

    java房屋租赁系统
  • RFC文档:官网、中文RFC文档 及 HTTP/2相关文档

    记录一下RFC的官方文档 2023 06 12修正中文RFC文档无法访问问题 一 RFC官方网站 http www rfc editor org Index of rfc RFC文档列表 Index of rfc 二 中文RFC文档 中文R
  • OS面试题(转载)

    转载自 http placement freshersworld com power preparation technical interview preparation os interview questions 23351 1 Wh
  • Tracy 小笔记 Vue - Vue 对象

    Vue 对象 const vue new Vue options el 类型 String HtmlElement 作用 挂载对象 决定之后Vue 对象会管理哪个 Dom template 当同时有 el 和 tempalte 的时候这里写
  • java泛型

    一 泛型概念的提出 为什么需要泛型 首先 我们看下下面这段简短的代码 1 public class GenericTest 2 3 public static void main String args 4 List list new Ar
  • 计算机文档加密如何解锁,bitlocker怎么解锁_bitlocker解锁方法

    许多用户为了保护电脑文件安全不被偷看 都会喜欢使用bitlocker加密功能来进行加密 Bitlocker是一种独特的为磁盘添加密码的工具 但是很多用户使用bitlocke加密完之后 不知道要怎么解锁 为此小编这就给大家带来bitlocke
  • Vue 使用 mqttws31.js 实现消息实时推送功能(WebSocket)

    1 在 vue 文件中引入 mqttws31 js 文件 mqttws31 js 文件代码在本页底部 import utils mqttws31 2 在 vue 文件中添加代码 export default data return clie
  • MapReduce官方案例wordcount

    wordcountReduce java package MaperReduce import java io IOException import org apache hadoop io LongWritable import org
  • Python后端Flask学习项目实践---搭建一个问答网站

    1 项目效果展示 这里主要以后端为主 前端的代码不做展示 如果需要代码可以评论或者私信 用户注册 登录相关 用邮箱进行注册 并通过向邮箱发送验证码来进行判断 一个邮箱只能注册一个账号 首页相关 用户登录后可以进行发布问题和回答 同时也提供搜
  • 外罚函数法计算机,罚函数法与障碍函数法

    罚函数法与障碍函数法 罚函数法与障碍函数法是求解约束极小化问题的较好的算法 其基本原理是在原目标函数中加上一个罚 障碍 函数 而得到一个增广目标函数 罚 障碍 函数的功能是对非可行或企图穿越边界而逃离可行域的点赋予一个极大的函数值 可以作一
  • 使用 Date 和 SimpleDateFormat 类表示时间以及Calendar 类的应用

    在程序开发中 经常需要处理日期和时间的相关数据 此时我们可以使用 java util 包中的 Date 类 这个类最主要的作用就是获取当前时间 我们来看下 Date 类的使用 使用 Date 类的默认无参构造方法创建出的对象就代表当前时间
  • sql:SQL优化知识点记录(七)

    1 索引优化5 2 索引优化6 3 索引优化7 查询 百分号加右边 否则索引会失效 没建立索引之前都是全表扫描 没建立索引 建立索引 建立索引 id是主键 他也可以从主键上取 覆盖索引要到了name 索引没有失效 覆盖索引要到了age 索引
  • 使用OpenCV,Python和dlib进行眨眼检测及计数

    前三篇博客学习了 windows10 Python3 7安装dlib库进行面部标志识别 python dlib实现面部标志识别 使用python dlib OpenCV提取眼睛 鼻子 嘴唇及下颌 这篇博客将进行进阶版的学习 眨眼检测 眨眼检
  • 如何利用codesense的GJB8114模板对c++源码进行进行规则检测

    2013年7 10 中国 民解放军总装备部发布了中华 民共和国国家军 标准GJB 8114 全称为 8114 2013 C C 语 编程安全 集 提出软件编程标准 以提 国家军 软件的安全性 并作为静态规则检查的依据 量数据表明 软件存在的
  • Python可视化图系列(1)-----jupyter notebook

    Python可视化 复杂的散点图 文章目录 Python可视化 复杂的散点图 前言 一 我们的目标是什么 二 实现目标的知识准备 1 引入库 2 导入数据 3 准备标签的列表和颜色 三 画目标图片 复杂的散点图 四 解读图像 总结 前言 提