您现在的位置是:首页 > 正文

Day3.数据可视化-- 可视化基础

2024-02-01 05:01:37阅读 2

可视化主要是以图像来展示数据间的关系,常见的图形种类有折线图,散点图,条形图,直方图,饼图。此外在接下来课程中还会用到箱线图,热力图,蜘蛛图,表示二元变量分布和成对关系的视图。学好可视化,不仅要会画图,更要梳理数据见的关系,以合适的方式将数据通过图形表达出来。

今天我们要来了解折线图,散点图,条形图,直方图,饼图和器特点。认识Matplotlib的图像结构,并以Matplotlib绘制折线图为例来掌握设置辅助显示层;此外,用Matplotlob设置辅助显示层,内容还增添拓展部份,平时用到的不是很多,作为了解即可。

常见图像

  • 折线图:以折线的上升或下降来表示统计数量的增减变化的统计图

    特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)

  • 散点图(Scatter):用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。

    特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)

  • 条形图:排列在工作表的列或行中的数据可以绘制到柱状图中。

    特点:绘制连离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别。(统计/对比)

  • 直方图(Histogram):由一系列高度不等的纵向条纹或线段表示数据分布的情况。一般用横轴表示数据范围,纵轴表示分布情况。

    特点:绘制连续性的数据展示一组或者多组数据的分布状况(统计)

  • 饼图(pie):用于表示不同分类的占比情况,通过弧度大小来对比各种分类。

    特点:分类数据的占比情况(占比)

Matplotlib画图基础

  第一天我们介绍过Matplotlib,它是一个Python 2D绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形。只需几行代码即可生成绘图,直方图,条形图,散点图等。

Matplotlib画图的简单实现

# 导入模块
import matplotlib.pyplot as plt
# 在jupyter中执行的时候显示图片
#matplotlib inline
# 传入x和y, 通过plot画图
plt.plot([3, 1, 7], [4, 5, 6])
# 在执行程序的时候展示图形
plt.show()

传入x和y时,括号中的第一个列表是x轴上的值,第二个列表是y上的值。

运行结果:

对Matplotlib图像结构的认识

在学习Matplotlib的过程中,大家一定会遇到这样那样的问题,比如说,背景图怎么设置?坐标轴怎么设置?坐标轴上的刻度值怎么设置?因此对于Matplotlib的图像结构组成我们要有一定的了解。通常情况下,我们可以将一副Matplotlib图像分成三层结构:

  1. 第一层是底层的容器层

    主要包括Canvas(画板)底层、Figure(画布)用户操作第一层设置画布的大小和背景颜色、Axes(绘图区)独立的坐标系;

  2. 第二层:辅助显示层

    主要包括Axis(轴)、Spines(边框线)、Tick(坐标轴刻度)、Grid(网格线)、Legend(图例说明)、Title(标题)等,该层可通过set_axis_off()或set_frame_on(False)等方法设置不显示。

    该层的设置可使图像显示更加直观更加容易被用户理解,但又并不会对图像产生实质的影响。

  3. 第三层:图像层

    即通过plot、hist、contour、scatter等方法绘制的图像。

Matplotlib绘制折线图

折线图的绘制

from matplotlib import pyplot as plt
x = range(1,8) # x轴的位置
y = [17, 17, 18, 15, 11, 11, 13]
# 传入x和y, 通过plot画折线图
plt.plot(x,y)
plt.show()

x轴数值的产生使用range函数,开始数字是1,结束时7,不包含8。

运行结果:

折线的颜色和形状设置

from matplotlib import pyplot as plt
x = range(1,8) # x轴的位置
y = [17, 17, 18, 15, 11, 11, 13]
# 传入x和y, 通过plot画折线图
plt.plot(x, y, color='red',alpha=0.5,linestyle='--',linewidth=3)
plt.show()
'''基础属性设置
color='red' : 折线的颜色
alpha=0.5 : 折线的透明度(0-1)
linestyle='--' : 折线的样式
linewidth=3 : 折线的宽度
'''
'''线的样式
- 实线(solid)
-- 短线(dashed)
-. 短点相间线(dashdot)
:虚点线(dotted)
'''

运行结果:

折点样式

from matplotlib import pyplot as plt
x = range(1,8) # x轴的位置
y = [17, 17, 18, 15, 11, 11, 13]
# 传入x和y, 通过plot画折线图
plt.plot(x, y, marker='v' )
plt.show()

运行结果:

折点形状选择:

标记maker            描述

‘o’                 圆圈  
‘.’                 点
‘D’                 菱形  
‘s’                 正方形
‘h’                 六边形1    
‘*’                 星号
‘H’                 六边形2    
‘d’                 小菱形
‘_’                 水平线 
‘v’                 一角朝下的三角形
‘8’                 八边形 
‘<’                 一角朝左的三角形
‘p’                 五边形 
‘>’                 一角朝右的三角形
‘,’                 像素  
‘^’                 一角朝上的三角形
‘+’                 加号  
‘\  ‘               竖线
‘None’,’’,’ ‘       无  
‘x’                 X

设置图片的大小和保存

from matplotlib import pyplot as plt
import random
x = range(2,20,2) # x轴的位置
y = [random.randint(15, 30) for i in x]
# 设置图片的大小
'''
figsize:指定figure的宽和高,单位为英寸;
dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80 1英寸等于2.5cm,A4纸是 21*30cm的纸张
'''
# 设置画布对象
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y) # 传入x和y, 通过plot画图
# 保存(注意:要放在show的上面,plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片。)
plt.savefig('./t1.png')
#./表示放在当前python文件的目录
plt.show()
# 图片的格式也可以保存为svg这种矢量图格式,这种矢量图放在网页中放大后不会有锯齿
# plt.savefig('./t1.svg')

x轴的数值,使用range(),step为2,不包括20;y轴的数值是一个列表表达式,由随机数产生,import random之后,randint产生随机整数,范围是15-30。“for i in x”是一个循环,作用是表明y轴数值产生随机数的次数,次数由x轴上数值的个数决定。

运行结果:

绘制x轴和y轴的刻度

from matplotlib import pyplot as plt
x = range(2,26,2) # x轴的位置
y = [random.randint(15, 30) for i in x]
plt.figure(figsize=(20,8),dpi=80)
# 设置x轴的刻度
# plt.xticks(x)
# plt.xticks(range(1,25))
# 设置y轴的刻度
# plt.yticks(y)
# plt.yticks(range(min(y),max(y)+1))
# 构造x轴刻度标签,for循环读取x轴刻度并控制产生刻度标签的个数,并以相应的格式显示;{}中,放置format(i)括号中的i,也就是取得x
x_ticks_label = ["{}:00".format(i) for i in x]
#rotation = 45 让字旋转45度
plt.xticks(x,x_ticks_label,rotation = 45)
# 设置y轴的刻度标签
y_ticks_label = ["{}℃".format(i) for i in range(min(y),max(y)+1)]
plt.yticks(range(min(y),max(y)+1),y_ticks_label)
# 绘图
plt.plot(x,y)
plt.show()

在设置Y轴标签时,标签数值的取值范围range(min(y),max(y)+1),这里min()和max()时是函数,分别取y中的最小和最大值,由于range函数不包集合右边的值,故加1。plt.yticks(range(min(y),max(y)+1),y_ticks_label)中,y_ticks_label表示y轴刻度产生的次数。

运行结果:

设置显示中文

matplotlib只显示英文,无法显示中文,需要修改matplotlib的默认字体。通过模块font_manager使用中文字体可以解决。

以表示两个小时内心脏每分钟跳动变化为例,x轴需要加上标题“时间”,y轴“次数”,图像标题“每分钟跳动次数”,如下图所示:


from matplotlib import pyplot as plt
import matplotlib
import random
x = range(0,120)
y = [random.randint(10,30) for i in range(120)]
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y)
# 加坐标轴信息

'''
查看Windows下的字体:“C:\Windows\Fonts”
可以自己下载字体文件(xxx.ttf),然后双击安装即可
图片中选用的是仿宋字体,simfang.ttf
'''
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\simfang.ttf',size=18)
plt.xlabel('时间',fontproperties=my_font,rotation=45)
plt.ylabel("次数",fontproperties=my_font)
# 设置标题
plt.title('每分钟跳动次数',fontproperties=my_font,color='red')
plt.show()

一图多线

# 假设大家在30岁的时候,根据自己的实际情况,统计出来你和你同事各自从11岁到30岁每年交的男/女朋友的数量如列
#表y1和y2,请在一个图中绘制出该数据的折线图,从而分析每年交朋友的数量走势。
y1 = [1,0,1,1,2,4,3,4,4,5,6,5,4,3,3,1,1,1,1,1]
y2 = [1,0,3,1,2,2,3,4,3,2,1,2,1,1,1,1,1,1,1,1]
x = range(11,31)
# 设置图形
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y1,color='red',label='自己')
plt.plot(x,y2,color='blue',label='闺蜜')
# 设置x轴刻度
xtick_labels = ['{}岁'.format(i) for i in x]
my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\simfang.ttf',size=18)
plt.xticks(x,xtick_labels,fontproperties=my_font,rotation=45)
# 绘制网格(网格也是可以设置线的样式)
#alpha=0.4 设置透明度
plt.grid(alpha=0.4)
# 添加图例(注意:只有在这里需要添加prop参数是显示中文,其他的都用fontproperties)
# 设置位置loc : upper left、 lower left、 center left、 upper center
plt.legend(prop=my_font,loc='upper right')
#展示
plt.show()

运行结果:

拓展部分:一图多个坐标系

# 方法add_subplot:给figure新增子图

# 这里引进的科学计算库Numpy,把它看作一个[列表]即可,目的是要使用log方法画log对数函数。
import numpy as np
from matplotlib import pyplot as plt
x = np.arange(1, 100) #与range()相同
#新建figure画布对象,三个坐标轴(子图)建立在同一个画布上
fig=plt.figure(figsize=(20,10),dpi=80)

#利用画布对象,在上面放置三个坐标系
#新建子图1
ax1=fig.add_subplot(2,2,1)
ax1.plot(x, x)
#新建子图2
ax2=fig.add_subplot(2,2,2)
ax2.plot(x, x ** 2) #x的二次方,如果是x**3是x的三次方
ax2.grid(color='r', linestyle='--', linewidth=1,alpha=0.3)
#新建子图3
ax3=fig.add_subplot(2,2,3)
ax3.plot(x, np.log(x))
plt.show()

在这里解释一下add_subplot(2,2,1)里的参数的含义。在一个画布上放置三个图,需要排列位置。

首先将一张图,分成两列,再分成两行,总共划分出四个格子,子图1按照从左到右从上到下的顺序放在第一个格子里。

运行结果:

拓展部分:设置坐标轴范围

#首先画出一个二次函数曲线
import matplotlib.pyplot as plt
import numpy as np
x= np.arange(-10,11,1)
y = x**2
plt.plot(x,y)

运行结果:

#通过设置x轴的范围,截取x,y轴部分
import matplotlib.pyplot as plt
import numpy as np
x= np.arange(-10,11,1)
y = x**2
plt.plot(x,y)
# 调x轴的左右两边
# plt.xlim([-5,5])
# 只调一边
# plt.xlim(xmin=-4)
# plt.xlim(xmax=4)
#这里我们只保留x为正的部分
plt.ylim(ymin=0)
plt.xlim(xmin=0)
plt.show()

运行结果:

02

小作业

1、说出五种常用图像的特点。

2、运用Matplotlib,自己编数据设计样式,绘制一幅自己的折线图。

写在后面:

今天还是一样~评论区留言打卡~

不知不觉第三天啦~~

还记得吗,学姐准备了一点小惊喜送给你

记得在群里分享你的完成情况哦~

好文章,我在看❤

网站文章

  • C++ 内存分区: 代码区 全局区 栈区 堆区

    C++ 内存分区: 代码区 全局区 栈区 堆区

    1.代码区: 存放函数体的二进制代码,由操作系统进行管理 **2.全局区:**存放全局变量和静态变量以及常量,数据在程序结束后由操作系统释放 存放内容:全局变量、静态变量、常量区(字符串常量和其他常量) **3.栈区:**由编译器分配和释放,存放函数的参数值,局部变量等 **4.堆区:**由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收 ...

    2024-02-01 05:01:10
  • Android中 Bitmap Drawable Paint的获取、转换以及使用

    比如Drawable中有一系列连续的图片,img_0.png, img_1.png, img_2.png ... 如果要动态获取这些图片,通过&quot;R.drawable.img_x&quot;的...

    2024-02-01 05:01:03
  • 【靶场平台】一些免费好用的靶机渗透测试环境

    1、Vulhub: (各种漏洞环境集合,一键搭建漏洞测试靶场) https://vulhub.org/(在线版) https://github.com/vulhub/vulhub(离线版) 2、Vul...

    2024-02-01 05:00:55
  • Servlet的自动加载

    Servlet的自动加载

    本文阐述了Servlet中与自动加载相关的知识点,并展示了怎样通过设置loadOnStartup属性将自定义Servlet设定为自动加载。

    2024-02-01 05:00:27
  • STM32单片机-CorTexM3位带操作的理解

    STM32单片机-CorTexM3位带操作的理解

    STM32单片机-CorTexM3位带操作的理解

    2024-02-01 05:00:21
  • 测试人员要掌握的基本的SQL语句

    测试人员要掌握的基本的SQL语句

    目录  一、DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)  二、DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)  三、DCL—数据控制语言(GRANT,REVOKE) 四、下半部分内容(主要是PL/<span class="t_tag" onclick="function onclick(){tagshow(event)}"

    2024-02-01 05:00:15
  • vue关于@无法找到文件报错

    vue关于@无法找到文件报错

    如果在Vite项目中使用@无法找到文件,通常是因为未正确配置路径别名(path alias)导致的。在Vite中,您可以使用vite.config.js文件来配置路径别名。请确保将路径别名配置为与您的项目结构和实际路径相匹配。在上述示例中,我们使用alias选项来配置路径别名。通过@别名,我们将./src目录与@关联起来。//配置less @ 跨域。

    2024-02-01 05:00:10
  • Springboot之Thymeleaf 表单标签(表单提交)|第二章-yellowcong 热门推荐

    Springboot之Thymeleaf 表单标签(表单提交)|第二章-yellowcong 热门推荐

    通过post方式提交表单的时候,需要有一个实体类,去接收表单传递的数据类容,在对象的属性读取中,Thymeleaf 提供了两种方式:1、直接通过${userInfo.username} ,这种实体bean + 属性的方式;2、通过选择表达式*{username}的这种方式。 在表单提交的表单中,表单对象需要在界面跳转进来的时候,传递一个表单对象过来,不然就会报错,不知道这个表单对象是什么鬼。 代码

    2024-02-01 04:59:38
  • Docker swarm部署控制

    Docker swarm部署控制

    还记得我之前写过一片文章叫做《Docker快速部署项目,极速搭建分布式》,在那里讲述了如何去使用docker swarm,如何构建自己的私人镜像仓库。随着最近的业务量的增长,机子加多。对于docker...

    2024-02-01 04:59:32
  • linux下的export和source命令

    1、source命令 source ~/.../../file source命令作用:source是bash shell的内置命令,在当前shell下读取并执行“file中的命令” 通常用于重新执行刚...

    2024-02-01 04:59:05