Python应用实例(二)数据可视化(一)

news2024/11/16 19:44:10

数据可视化(一)

  • 1.安装Matplotlib
  • 2.绘制简单的折线图
    • 2.1 修改标签文字和线条粗细
    • 2.2 矫正图形
    • 2.3 使用内置样式
    • 2.4 使用scatter()绘制散点图并设置样式
    • 2.5 使用scatter()绘制一系列点
    • 2.6 自动计算数据
    • 2.7 自定义颜色
    • 2.8 使用颜色映射
    • 2.9 自动保存图表

数据可视化指的是通过可视化表示来探索数据。它与数据分析紧密相关,而数据分析指的是使用代码来探索数据集的规律和关联。数据集可以是用一行代码就能表示的小型数字列表,也可以是数千兆字节的数据。

漂亮地呈现数据并非仅仅关乎漂亮的图片。通过以引人注目的简单方式呈现数据,能让观看者明白其含义:发现数据集中原本未知的规律和意义。

所幸即便没有超级计算机,你也能够可视化复杂的数据。鉴于Python的高效性,使用它在笔记本电脑上就能快速地探索由数百万个数据点组成的数据集。数据点并非必须是数。利用本书前半部分介绍的基本知识,也可对非数值数据进行分析。

在基因研究、天气研究、政治经济分析等众多领域,人们常常使用Python来完成数据密集型工作。数据科学家使用Python编写了一系列优秀的可视化和分析工具,其中很多可供你使用。最流行的工具之一是Matplotlib,它是一个数学绘图库,我们将使用它来制作简单的图表,如折线图和散点图。然后,我们将基于随机漫步概念生成一个更有趣的数据集——根据一系列随机决策生成的图表。

我们使用Plotly包,它生成的图表非常适合在数字设备上显示。Plotly生成的图表可根据显示设备的尺寸自动调整大小,还具备众多交互特性,如在用户将鼠标指向图表的不同部分时突出数据集的特定方面。本章将使用Plotly来分析掷骰子的结果。

1.安装Matplotlib

首先使用Matplotlib来生成几个图表,为此需要使用pip来安装它。pip是一个可用于下载并安装Python包的模块。请在终端提示符下执行如下命令:

$ python -m pip install --user matplotlib

这个命令让Python运行模块pip,并将matplotlib包添加到当前用户的Python安装中。在你的系统中,如果运行程序或启动终端会话时使用的命令不是python,而是python3,应使用类似于下面的命令:

$ python3 -m pip install --user matplotlib

也可以直接在pycharm中搜索安装:
在这里插入图片描述

2.绘制简单的折线图

下面使用Matplotlib绘制一个简单的折线图,再对其进行定制,以实现信息更丰富的数据可视化效果。我们将使用平方数序列1、4、9、16和25来绘制这个图表。只需提供如下的数,Matplotlib将完成其他工作:mpl_squares.py

  import matplotlib.pyplot as plt

  squares = [1, 4, 9, 16, 25]
❶ fig, ax = plt.subplots()
  ax.plot(squares)

  plt.show()

首先导入模块pyplot,并为其指定别名plt,以免反复输入pyplot。(在线示例大多这样做,这里也不例外。)模块pyplot包含很多用于生成图表的函数。

我们创建了一个名为squares的列表,在其中存储要用来制作图表的数据。然后,采取了另一种常见的Matplotlib做法——调用函数subplots()(见❶)。这个函数可在一张图片中绘制一个或多个图表。变量fig表示整张图片。变量ax表示图片中的各个图表,大多数情况下要使用它。

接下来调用方法plot(),它尝试根据给定的数据以有意义的方式绘制图表。函数plt.show()打开Matplotlib查看器并显示绘制的图表,如图15-1所示。在查看器中,你可缩放和导航图形,还可单击磁盘图标将图表保存起来。

在这里插入图片描述

2.1 修改标签文字和线条粗细

如图15-1所示的图形表明数是越来越大的,但标签文字太小、线条太细,难以看清楚。所幸Matplotlib让你能够调整可视化的各个方面。下面通过一些定制来改善这个图表的可读性,如下所示:mpl_squares.py

  import matplotlib.pyplot as plt

  squares = [1, 4, 9, 16, 25]

  fig, ax = plt.subplots()
❶ ax.plot(squares, linewidth=3)

  # 设置图表标题并给坐标轴加上标签1。
❷ ax.set_title("平方数", fontsize=24)
❸ ax.set_xlabel("值", fontsize=14)
  ax.set_ylabel("值的平方", fontsize=14)

  # 设置刻度标记的大小。
❹ ax.tick_params(axis='both', labelsize=14)

  plt.show()

参数linewidth(见❶)决定了plot()绘制的线条粗细。方法set_title()(见❷)给图表指定标题。在上述代码中,出现多次的参数fontsize指定图表中各种文字的大小。

方法set_xlabel()和set_ylabel()让你能够为每条轴设置标题(见❸)。方法tick_params()设置刻度的样式(见❹),其中指定的实参将影响[插图]轴和[插图]轴上的刻度(axes=‘both’),并将刻度标记的字号设置为14(labelsize=14)。

最终的图表阅读起来容易得多,如图15-2所示:标签文字更大,线条也更粗了。通常,需要尝试不同的值,才能确定什么样的设置生成的图表最合适。

在这里插入图片描述

2.2 矫正图形

图形更容易看清后,我们发现没有正确地绘制数据:折线图的终点指出4.0的平方为25!下面来修复这个问题。

向plot()提供一系列数时,它假设第一个数据点对应的[插图]坐标值为0,但这里第一个点对应的[插图]值为1。为改变这种默认行为,可向plot()同时提供输入值和输出值:

mpl_squares.py

import matplotlib.pyplot as plt

input_values = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]

fig, ax = plt.subplots()
ax.plot(input_values, squares, linewidth=3)

# 设置图表标题并给坐标轴加上标签。
--snip--

现在plot()将正确地绘制数据,因为同时提供了输入值和输出值,plot()无须对输出值的生成方式做出假设。最终的图形是正确的,如图

在这里插入图片描述

使用plot()时可指定各种实参,还可使用众多函数对图形进行定制。本章后面处理更有趣的数据集时,将继续探索这些定制函数。

2.3 使用内置样式

Matplotlib提供了很多已经定义好的样式,它们使用的背景色、网格线、线条粗细、字体、字号等设置很不错,让你无须做太多定制就可生成引人瞩目的可视化效果。要获悉在你的系统中可使用哪些样式,可在终端会话中执行如下命令:

>>> import matplotlib.pyplot as plt
>>> plt.style.available
['seaborn-dark', 'seaborn-darkgrid', 'seaborn-ticks', 'fivethirtyeight',
--snip--

可在生成图表的代码前添加如下代码行:mpl_squares.py

import matplotlib.pyplot as plt

input_values = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]

plt.style.use('seaborn')
fig, ax = plt.subplots()
--snip--

这些代码生成的图表如图所示。可供使用的内置样式有很多,请尝试使用它们,找出你喜欢的。

在这里插入图片描述

2.4 使用scatter()绘制散点图并设置样式

有时候,绘制散点图并设置各个数据点的样式很有用。例如,你可能想以一种颜色显示较小的值,用另一种颜色显示较大的值。绘制大型数据集时,还可对每个点都设置同样的样式,再使用不同的样式选项重新绘制某些点以示突出。

要绘制单个点,可使用方法scatter()。向它传递一对[插图]坐标和[插图]坐标,它将在指定位置绘制一个点:

catter_squares.py

import matplotlib.pyplot as plt

plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.scatter(2, 4)

plt.show()

下面来设置图表的样式,使其更有趣。我们将添加标题,给坐标轴加上标签,并且确保所有文本都大到能够看清:

  import matplotlib.pyplot as plt

  plt.style.use('seaborn')
  fig, ax = plt.subplots()
❶ ax.scatter(2, 4, s=200)

  # 设置图表标题并给坐标轴加上标签。
  ax.set_title("平方数", fontsize=24)
  ax.set_xlabel("值", fontsize=14)
  ax.set_ylabel("值的平方", fontsize=14)

  # 设置刻度标记的大小。
  ax.tick_params(axis='both', which='major', labelsize=14)

  plt.show()

在❶处,调用scatter()并使用参数s设置绘制图形时使用的点的尺寸。如果此时运行scatter_squares.py,将在图表中央看到一个点,如图

在这里插入图片描述

2.5 使用scatter()绘制一系列点

要绘制一系列的点,可向scatter()传递两个分别包含[插图]值和[插图]值的列表,如下所示:scatter_squares.py

import matplotlib.pyplot as plt

x_values = [1, 2, 3, 4, 5]
y_values = [1, 4, 9, 16, 25]

plt.style.use('seaborn')
fig, ax = plt.subplots()
ax.scatter(x_values, y_values, s=100)

# 设置图表标题并给坐标轴指定标签。
--snip--

列表x_values包含要计算平方值的数,列表y_values包含前述数的平方值。将这些列表传递给scatter()时,Matplotlib依次从每个列表中读取一个值来绘制一个点。要绘制的点的坐标分别为(1, 1)、(2, 4)、(3, 9)、(4, 16)和(5, 25),最终的结果如图所示。

在这里插入图片描述

2.6 自动计算数据

手工计算列表要包含的值可能效率低下,需要绘制的点很多时尤其如此。我们不必手工计算包含点坐标的列表,可以用Python循环来完成。下面是绘制1000个点的代码:scatter_squares.py

  import matplotlib.pyplot as plt

❶ x_values = range(1, 1001)
  y_values = [x**2 for x in x_values]

  plt.style.use('seaborn')
  fig, ax = plt.subplots()
❷ ax.scatter(x_values, y_values, s=10)

  # 设置图表标题并给坐标轴加上标签。
  --snip--

  # 设置每个坐标轴的取值范围。
❸ ax.axis([0, 1100, 0, 1100000])

  plt.show()

首先创建了一个包含[插图]值的列表,其中包含数1~1000(见❶)。接下来,是一个生成[插图]值的列表解析,它遍历[插图]值(for xin x_values),计算其平方值(x**2),并将结果存储到列表y_values中。然后,将输入列表和输出列表传递给scatter()(见❷)。这个数据集较大,因此将点设置得较小。

在❸处,使用方法axis()指定了每个坐标轴的取值范围。方法axis()要求提供4个值:[插图]和[插图]坐标轴的最小值和最大值。这里将[插图]坐标轴的取值范围设置为0~1100,并将[插图]坐标轴的取值范围设置为0~1 100 000。结果如图所示。

在这里插入图片描述

2.7 自定义颜色

要修改数据点的颜色,可向scatter()传递参数c,并将其设置为要使用的颜色的名称(放在引号内),如下所示:

ax.scatter(x_values, y_values, c='red', s=10)

还可使用RGB颜色模式自定义颜色。要指定自定义颜色,可传递参数c,并将其设置为一个元组,其中包含三个0~1的小数值,分别表示红色、绿色和蓝色的分量。例如,下面的代码行创建一个由淡绿色点组成的散点图:

ax.scatter(x_values, y_values, c=(0, 0.8, 0), s=10)

值越接近0,指定的颜色越深;值越接近1,指定的颜色越浅。

2.8 使用颜色映射

颜色映射(colormap)是一系列颜色,从起始颜色渐变到结束颜色。在可视化中,颜色映射用于突出数据的规律。例如,你可能用较浅的颜色来显示较小的值,并使用较深的颜色来显示较大的值。

模块pyplot内置了一组颜色映射。要使用这些颜色映射,需要告诉pyplot该如何设置数据集中每个点的颜色。下面演示了如何根据每个点的[插图]值来设置其颜色:

scatter_squares.py

import matplotlib.pyplot as plt

x_values = range(1, 1001)
y_values = [x**2 for x in x_values]

ax.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues, s=10)

# 设置图表标题并给坐标轴加上标签。
--snip--

我们将参数c设置成了一个[插图]值列表,并使用参数cmap告诉pyplot使用哪个颜色映射。这些代码将[插图]值较小的点显示为浅蓝色,并将[插图]值较大的点显示为深蓝色,结果如图所示。

在这里插入图片描述

2.9 自动保存图表

要让程序自动将图表保存到文件中,可将调用plt.show()替换为调用plt.savefig():

plt.savefig('squares_plot.png', bbox_inches='tight')

第一个实参指定要以什么文件名保存图表,这个文件将存储到scatter_squares.py所在的目录。第二个实参指定将图表多余的空白区域裁剪掉。如果要保留图表周围多余的空白区域,只需省略这个实参即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/757289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT实现雷达扫描

参考链接&#xff1a;https://www.jb51.net/article/279998.htm 在此基础上做了优化。 效果图&#xff1a; 鼠标左键点击显示当前点相对于圆心的距离和方位 // 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <Q…

Java并发编程(11) —— CountDownLatch原理详解

一、CountDownLatch介绍 在日常开发中经常会遇到需要在主线程中开启多个线程去并行执行任务&#xff0c;并且主线程需要等待所有子线程执行完毕后再进行汇总的场景。在 CountDownLatch 出现之前一般都使用线程的join()方法来实现这一点&#xff0c;但是 join 方法不够灵活&…

jq实现网站-点击标签,添加到一个盒子中,再次点击去掉该标签

实现效果&#xff1a; 代码逻辑&#xff1a; 首先使用hasClass()方法判断点击的标签是否已经存在于盒子中。如果标签已经存在于盒子中&#xff0c;则使用removeClass()方法移除标签的’active’类名&#xff0c;并使用filter()方法找到盒子中与点击的标签文本相同的元素&#…

CAN总线(三)CAN总线链路层的三个标准

1、高速CAN总线 ISO 11898-2中定义了通信速率为125Kbps~1Mbps的高速闭环CAN通信标准,当通信总线长度≤40米,最大通信速率可达到1Mbps,高速闭环CAN(高速CAN)通信如下图所示: 1.1、电气特性 高速CAN总线上为显性电平(逻辑0)时,CAN_H为3.5V、CAN_L为1.5V,此时电压差是…

Qt应用开发——下载安装和HelloWorld

目录 1、下载和安装 2、HelloWorld 1、下载和安装 工欲善其事&#xff0c;必先利其器。第一步环境安装好是必要的过程。Qt 在23年4月份已经更新到了6.5.0&#xff0c;相对于其他的工具&#xff0c;Qt不断在维护升级这一点就非常的友好&#xff0c;这里对版本的迭代更新内容不…

由变上限积分求导到随机变量的概率分布

变上限积分求导书推导 推导过程根据导数的定义和积分的几何意义&#xff0c;看图&#xff1a; 随机变量的概率密度推导 若随机变量x 在 &#xff08;负无穷&#xff0c;正无穷&#xff09;的区间上服从f(x)的概率密度&#xff0c;设y g(x), x h(y)&#xff0c;求y 的概率…

web前端开发工程师的工作职责(合集)

web前端开发工程师的工作职责1 职责&#xff1a; 1.Web前端功能设计、开发和实现&#xff0c;与后台工程师协作&#xff0c;完成数据交互、动态展现; 2.对UI设计的结果进行页面制作(CSS/css3xhtml[表情]ml5JS); 3.熟悉编写可复用的用户接口组件; 4.从视觉和易用性角度&…

Git 安装设置

一&#xff1a;介绍 Git 是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 二&#xff1a;安装 安装 Git for Windows&#xff0c;网址&#xff1a;https://git-scm.com/ 选择安装组件&#xff1a; 上图红框内的选项是默认勾选的&#xff…

设备集中监控,半导体CMS系统的优势解析

设备集中监控是半导体制造企业中的一项重要任务。传统的设备管理往往存在着分散的监控系统和孤立的报警中心的问题&#xff0c;给企业管理带来了一系列的挑战。而半导体CMS系统的出现&#xff0c;为企业解决了这些问题&#xff0c;并带来了明显的优势。 半导体CMS系统实现了设备…

初识mysql数据库之复合查询

目录 一、多表查询的概念 二、笛卡尔积 1. 笛卡尔积的概念 2. 笛卡尔积使用案例 2.1 显示雇员名、雇员工资以及所在部门的名字 2.2 显示部门号为10的部门名&#xff0c;员工名和工资 2.3 显示所有员工的姓名、工资和工资级别 3. 自连接 3.1 自连接的概念 3.2 自连接案…

idea 中的 pom.xml 文件变为灰色

idea 中的 pom.xml 文件变为灰色被忽略掉了 可能是新建 Module 之前创建了同名 Module&#xff0c; 并进行删除&#xff0c;idea 自动认为该排除此 Module 解决方法&#xff1a; 我们只要到 File → Settings → Build,Execution,Deployment →Ignored Files&#xff0c; …

数据结构(王道)——栈

一、栈的定义&#xff1a; 二、栈的基本操作&#xff1a; 对于栈的出栈顺序的理解&#xff1a; 栈总结&#xff1a; 三、顺序栈 栈的基本操作&#xff1a; 静态方式创建栈&#xff1a; 初始化&#xff1a; 进栈&#xff08;插入&#xff09;&#xff1a; 出栈&#xff08;删除&…

MFC扩展库BCGControlBar Pro v33.5新版亮点 - 其他增强功能

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v33.5已正式发布了&#xff0c;此版本包含了Ribbon&#xff08;功能区&#xff09;自定义…

可以写进简历的软件测试电商项目(超详细版),不进来get一下?

前言 说实话&#xff0c;在找项目的过程中&#xff0c;我下载过&#xff08;甚至付费下载过&#xff09;N多个项目、联系过很多项目的作者&#xff0c;但是绝大部分项目&#xff0c;在我看来&#xff0c;并不适合你拿来练习&#xff0c;它们或多或少都存在着“问题”&#xff…

JVM之内存与垃圾回收篇2

文章目录 3 运行时区域3.1 本地方法栈3.2 程序计数器3.3 方法区3.3.1 Hotspot中方法区的演进3.3.2 设置方法区内存大小 3.4 栈3.4.1 几个面试题 3.5 堆3.5.1 Minor GC、Major GC和Full GC3.5.2 使用分代思想的原因3.5.3 内存分配策略3.5.4 TLAB3.5.5 堆是不是分配对象存储的唯一…

一文带你玩转自定义类型

作者主页&#xff1a;paper jie的博客_CSDN博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《系统解析C语言》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金…

Exception 类的层次

所有的异常类是从 java.lang.Exception 类继承的子类。 Exception 类是 Throwable 类的子类。除了Exception类外&#xff0c;Throwable还有一个子类Error 。 Java 程序通常不捕获错误。错误一般发生在严重故障时&#xff0c;它们在Java程序处理的范畴之外。 Error 用来指示运…

4027: 网络覆盖

4027: 网络覆盖 题目内容 有 n n n 个基站&#xff0c;他们可以抽象成一条数轴上的 n n n 个点&#xff0c;其中第 i i i 个基站在数轴上 x i x_i xi​ 的位置。 现在给每个基站分配一个半径 r i r_i ri​&#xff0c;这样对于第 i i i 个基站&#xff0c;它就会用信号…

uniapp中refs获取打印是空对象{}的解决办法

场景复现 版本如下: "dcloudio/uni-app": "2.0.2-3080720230703001", "vue": "> 2.6.14 < 2.7", 开发中发现只要是view这些原始标签的ref都无法在任何地方获取到refs.xxx, 而组件标签如<myStep></myStep> 这种加ref…

魔百盒cm101s m8233 emmc 卡刷教程

1、下载适用于对应型号的电视盒子刷机&#xff1b; https://download.csdn.net/download/qq_25601345/88051654?spm1001.2014.3001.5501 2、将下载好的四个文件放入u盘&#xff08;FAT32格式、最好4/8G的u盘&#xff09; 3、将u盘插入机顶盒的靠近网口的Usb接口 4、用镊子短…