利用Matplotlib画简单的线形图

news2025/1/31 21:04:22

实验题目:简单的线形图

实验目的:利用Matplotlib画简单的线形图

实验环境:海豚大数据和人工智能实验室,使用的Python库

名称

版本

简介

numpy

1.16.0

线性代数

Pandas

0.25.0

数据分析

Matplotlib

3.1.0

数据可视化

3实验适用的对象

  • 已经学习了Python基础,具备机器学习基础
  • 学习对象:本科学生、研究生、人工智能、算法相关研究者、开发者
  • 大数据分析与人工智能

步骤1. 安装并引入必要的库

  1. 代码:

!pip install numpy==1.16.0

!pip install pandas==0.25.0!

pip install matplotlib==3.1.0

  1. 结果:

Looking in indexes: https://pypi.zjhu.dolphin-labs.com/simple/, Simple Index

Requirement already satisfied: numpy==1.16.0 in /opt/conda/lib/python3.6/site-packages (1.16.0)

WARNING: You are using pip version 20.1; however, version 21.3.1 is available.

You should consider upgrading via the '/resources/common/.virtualenv/python3.6/bin/python -m pip install --upgrade pip' command.

Looking in indexes: https://pypi.zjhu.dolphin-labs.com/simple/, Simple Index

Requirement already satisfied: pandas==0.25.0 in /opt/conda/lib/python3.6/site-packages (0.25.0)

Requirement already satisfied: pytz>=2017.2 in /opt/conda/lib/python3.6/site-packages (from pandas==0.25.0) (2021.3)

Requirement already satisfied: python-dateutil>=2.6.1 in /opt/conda/lib/python3.6/site-packages (from pandas==0.25.0) (2.8.1)

Requirement already satisfied: numpy>=1.13.3 in /opt/conda/lib/python3.6/site-packages (from pandas==0.25.0) (1.16.0)

Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.6/site-packages (from python-dateutil>=2.6.1->pandas==0.25.0) (1.14.0)

WARNING: You are using pip version 20.1; however, version 21.3.1 is available.

You should consider upgrading via the '/resources/common/.virtualenv/python3.6/bin/python -m pip install --upgrade pip' command.

Looking in indexes: https://pypi.zjhu.dolphin-labs.com/simple/, Simple Index

Requirement already satisfied: matplotlib==3.1.0 in /opt/conda/lib/python3.6/site-packages (3.1.0)

Requirement already satisfied: python-dateutil>=2.1 in /opt/conda/lib/python3.6/site-packages (from matplotlib==3.1.0) (2.8.1)

Requirement already satisfied: cycler>=0.10 in /opt/conda/lib/python3.6/site-packages (from matplotlib==3.1.0) (0.11.0)

Requirement already satisfied: numpy>=1.11 in /opt/conda/lib/python3.6/site-packages (from matplotlib==3.1.0) (1.16.0)

Requirement already satisfied: kiwisolver>=1.0.1 in /opt/conda/lib/python3.6/site-packages (from matplotlib==3.1.0) (1.3.1)

Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /opt/conda/lib/python3.6/site-packages (from matplotlib==3.1.0) (2.4.7)

Requirement already satisfied: six>=1.5 in /opt/conda/lib/python3.6/site-packages (from python-dateutil>=2.1->matplotlib==3.1.0) (1.14.0)

WARNING: You are using pip version 20.1; however, version 21.3.1 is available.

You should consider upgrading via the '/resources/common/.virtualenv/python3.6/bin/python -m pip install --upgrade pip' command.

  1. 代码:

%matplotlib inline

import matplotlib.pyplot as plt

plt.style.use('seaborn-whitegrid')

import numpy as np

可能最简单的图是一个函数y=f(x)的可视化。

在这里,我们将首先考虑创建这种类型的简单图。

对于所有的Matplotlib图,我们首先创建一个图形和一个坐标轴:

  1. 代码:

fig = plt.figure()

ax = plt.axes()

x = np.linspace(0, 10, 1000)

ax.plot(x, np.sin(x));

  1. 结果:
1.1 Figure对象

Matplotlib中,图(类plt.Figure的一个实例)可以被认为是一个包含所有表示轴、图形、文本和标签的对象的容器。

figure 对象是最外层的绘图单位,默认是以 1开始编号(MATLAB风格,Figure 1, Figure 2, ...),可以用 plt.figure() 产生一幅图像,除了默认参数外,可以指定的参数有:

  • num - 编号
  • figsize - 图像大小
  • dpi - 分辨率
  • facecolor - 背景色
  • edgecolor - 边界颜色
  • frameon - 边框

这些属性也可以通过 Figure 对象的 set_xxx 方法来改变。

1.2 Axes 轴域

我们在上面看到的ax是轴域(类plt.Axes的一个实例):一个带有刻度和标签的边界框, 可理解成一些轴(Axis,具体的坐标系)的集合,这个集合还有很多轴(Axis)属性、标注等,它最终将包含构成我们的可视化的plot元素。

一旦我们创建了一个坐标轴,我们就可以使用ax.plot函数来绘制一些数据。

  1. 代码:

fig = plt.figure()  

ax1 = fig.add_axes([0.1, 0.3, 0.7, 0.7])     

ax2 = fig.add_axes([0.3, 0.5, 0.3, 0.3])    

plt.plot(np.arange(3))

plt.show()

  1. 结果:

或者,我们可以使用pylab接口,并在后台为我们创建图和轴。

  1. 代码:

plt.plot(x, np.sin(x));

  1. 结果:

如果我们想要创建一个多行的图形,我们可以简单地调用plot 函数多次:

  1. 代码:

plt.plot(x, np.sin(x))

plt.plot(x, np.cos(x));

  1. 结果:

这就是在Matplotlib中绘制简单函数的全部内容!

现在我们将深入了解如何控制轴和线的外观。

步骤2 调整图形:线条的颜色和风格

你首先想要调整的可能是控制一个图形的线条颜色和风格。 plt.plot()函数接受额外的参数,可以用来指定这些参数。

为了调整颜色,你可以使用color这个词,它接受一个代表几乎任何可以想象到的颜色的字符串参数。

颜色可以通过多种方式来指定:

  1. 代码:

plt.plot(x, np.sin(x - 0), color='blue')       

plt.plot(x, np.sin(x - 1), color='g')          

plt.plot(x, np.sin(x - 2), color='0.75')       

plt.plot(x, np.sin(x - 3), color='#FFDD44')    

plt.plot(x, np.sin(x - 4), color=(1.0,0.2,0.3))

plt.plot(x, np.sin(x - 5), color='chartreuse');

  1. 结果:

如果没有指定颜色,Matplotlib将自动循环通过一组默认颜色来进行多行。

同样的,线条风格也可以通过使用linestyle 关键字来调整:

  1. 代码:

plt.plot(x, x + 0, linestyle='solid')

plt.plot(x, x + 1, linestyle='dashed')

plt.plot(x, x + 2, linestyle='dashdot')

plt.plot(x, x + 3, linestyle='dotted');

plt.plot(x, x + 4, linestyle='-') 

plt.plot(x, x + 5, linestyle='--')

plt.plot(x, x + 6, linestyle='-.')

plt.plot(x, x + 7, linestyle=':'); 

  1. 结果:

如果你想要非常简洁,这些 linestylecolor的代码可以组合成一个非关键字的plt.plot()功能:

  1. 代码:

plt.plot(x, x + 0, '-g') 

plt.plot(x, x + 1, '--c')

plt.plot(x, x + 2, '-.k')

 plt.plot(x, x + 3, ':r'); 

  1. 结果:

表示颜色的字符参数有:

字符

颜色

‘b’

蓝色blue

‘g’

绿色green

‘r’

红色red

‘c’

青色cyan

‘m’

品红magenta

‘y’

黄色yellow

‘k’

黑色black

‘w’

白色white

‘#008000’

RGB某颜色

‘0.8’

灰度值字符串

表示(风格)类型的字符参数有:

字符

类型

字符

类型

'-'

实线

'--'

虚线

'-.'

虚点线

':'

点线

'.'

','

像素点

'o'

圆点

'v'

下三角点

'^'

上三角点

'<'

左三角点

'>'

右三角点

'1'

下三叉点

'2'

上三叉点

'3'

左三叉点

'4'

右三叉点

's'

正方点

'p'

五角点

'*'

星形点

'h'

六边形点1

'H'

六边形点2

'+'

加号点

'x'

乘号点

'D'

实心菱形点

'd'

瘦菱形点

'_'

横线点

步骤3. 设定坐标轴的范围

Matplotlib在为图形选择默认的坐标轴上做的很好,但是有时候我们有更改坐标轴的需要

  1. 代码:

x = np.linspace(-5* np.pi,5 * np.pi)

y, z = np.sin(x), np.cos(x)

plt.plot(x, y, linewidth=2.0, color='r')

plt.plot(x, z, linewidth=3.0, color='b', linestyle='--')

plt.show()

  1. 结果:

最基本的调整轴限的方法是使用plt.xlim()  plt.ylim() 的方法:

  1. 代码:

x = np.linspace(-5* np.pi,5 * np.pi, 200)

y, z = np.sin(x), np.cos(x)

plt.plot(x, y, linewidth=2.0, color='r')

plt.plot(x, z, linewidth=3.0, color='b', linestyle='--')

plt.xlim(-5, 5)

plt.show()

  1. 结果:

如果出于某种原因,您想要反向显示任意一个轴,您可以简单地颠倒参数的顺序:

  1. 代码:

plt.plot(x, np.sin(x))

plt.xlim(10, 0)

plt.ylim(1.2, -1.2);

  1. 结果:

一个有用的相关方法是 plt.axis(),允许您通过一个指定[xmin, xmax, ymin, ymax]的列表来设置xy的极限:

  1. 代码:

plt.plot(x, np.sin(x))

plt.axis([-1, 11, -1.5, 1.5]);

  1. 结果:

plt.axis()方法甚至超出了这个范围,允许你做一些事情,比如自动收紧当前图形的边界:

  1. 代码:

plt.plot(x, np.sin(x))

plt.axis('tight');

  1. 结果:

它甚至允许更高级别的规范,比如保证一个相等的宽比,这样在屏幕上,x中的一个单位就等于y中的一个单位:

  1. 代码;

plt.plot(x, np.sin(x))

plt.axis('equal');

  1. 结果:
  • 练习 1:绘制x的tan函数图像,将x轴设为(0,10),y轴设为(-1.5,1.5)
  1. 代码:

plt.plot(x, np.tan(x))

plt.axis([0,10,-1.5,1.5]);
  1. 结果:

步骤4 图形的标签

作为本实验的最后一部分,我们将简要地看一下图形的标签:标题、轴标签和简单的说明。

标题和轴标签是最简单的标签,有一些方法可以用来快速设置它们:

  1. 代码:
import numpy as np
t =np.arange(0., 5., 0.2)    
plt.plot(t, t, 'r--', label='y=t')
plt.plot(t, t ** 2, 'bs'label='y=t^2')
plt.plot(t, t ** 3, 'g^'label='y=t^3')
plt.xlabel("X values")
plt.ylabel("Y values")
plt.legend()
plt.show()
  1. 结果:

这些标签的位置、大小和样式可以使用可选参数来调整。

当在单个轴中显示多个行时,创建一个标记每行类型的图形说明是很有用的。

同样,Matplotlib有一种快速创建这样一个说明的内置方法。

这是通过plt.legend() 的方法来完成的。

虽然有几种有效的使用方法,但我发现最容易的方法是使用labelplot函数关键字来指定每行的标签:

  1. 代码:

plt.plot(x, np.sin(x), '-g', label='sin(x)')

plt.plot(x, np.cos(x), ':b', label='cos(x)')

plt.axis('equal')

plt.legend();

  1. 结果:

正如您所看到的,plt.legend()函数可以跟踪线条样式和颜色,并与正确的标签匹配。

  • 练习 2:对练习1创建的图形添加标签:x轴、y轴、以及图形说明
  1. 代码:
import numpy as np
t = np.arange(0., 5., 0.2)    
plt.plot(x, np.tan(x), '-p', label='tan(x)')
plt.axis([0,10,-1.5,1.5])
plt.xlabel("X values")
plt.ylabel("Y values")
plt.legend()
plt.show()
  1. 结果:

步骤5 Matplotlib陷阱

虽然大多数 plt函数可以直接转化为 ax的方法(plt.plot() → ax.plot()plt.legend() → ax.legend()),但不是对于所有的命令都是这样的。

特别地,设置坐标轴极限、标签和标题的函数被稍微修改了。

要在matlabstyle函数和面向对象的方法之间进行转换,请进行以下更改:

  1. plt.xlabel() → ax.set_xlabel()
  2. plt.ylabel() → ax.set_ylabel()
  3. plt.xlim() → ax.set_xlim()
  4. plt.ylim() → ax.set_ylim()
  5. plt.title() → ax.set_title()

在面向对象的界面中绘图,而不是单独调用这些函数,使用ax.set()方法来设置所有这些属性通常更方便:

  1. 代码:
ax=plt.axes()
ax.plot(x, np.sin(x))
ax.set(xlim=(0, 10), ylim=(-2, 2),xlabel='x', ylabel='sin(x)',title='A Simple Plot');
  • 练习 3:使用上文中介绍到的办法,对练习2的代码进行相应的修改
ax = plt.axes()
ax.plot(x, np.tan(x))
ax.set(xlim=(0, 10), ylim=(-1.5, 1.5), xlabel='x', ylabel='tan(x)',title='A Simple Plot');

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

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

相关文章

ESP8266 TCP/串口透传

简介 先在PC上做测试, 使用串口软件对ESP8266 模块进行设置, 使用网络助手软件与串口软件进行自由收发设置 ATRST ## 复位 ATCWMODE_DEF1 ## 设置为Station模式 ATCWJAP_DEF“路由器wifi名称”,“路由器wifi密码” ## 设置ESP连接的路由器名称密码 ATCIPSTART“TCP”,“192.1…

鸿蒙和各大厂合作,是不是要火起来

今年9月底&#xff0c;在华为秋季全场景新品发布会上&#xff0c;华为常务董事、终端BG CEO余承东宣布&#xff0c;鸿蒙原生应用全面启动&#xff0c;HarmonyOS NEXT开发者预览版将在2024年第一季度开放。 近日&#xff0c;腾讯、阿里、美团、网易&#xff0c;外包大厂中软国际…

评论回复功能数据库设计

1. 评论的场景 类似csdn博客评论 2. 建表sql CREATE TABLE comment (id varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT id,parent_id varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT 父级评论id&#xff08;…

【原理图PCB专题】原理图图纸锁定/解锁与PCB文件加密方式

在工作中我们会遇到需要冻结原理图进行评审和加密图纸防止被他人盗用的需求。那么在OrCAD Capture中如何对图纸进行锁定与解锁,如何在Allegro中对PCB工程进行加密呢? 原理图锁定与解锁 打开原理图,在图纸中单击右键,选择lock/unlock就可以进行锁定与解锁。 锁定时图纸图…

C语言中常用的sscanf函数

文章目录 1. 接受全部参数&#xff1a;2、分辨数字和字符3. 数字和字符一起会默认是字符4. 同时接收多个变量5. 指定长度的集合操作6. 排除部分字符 sscanf()定义于头文件stdio.h。sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scan…

网安面试三十道题(持续更新)(sql注入系列)

61 给你一个网站&#xff0c;一般怎么做渗透测试的 先确定黑盒测试还是白盒测试 黑盒测试 信息收集&#xff1a; 服务器相关---&#xff1a;系统版本&#xff0c;真实IP&#xff0c;开放端口&#xff0c;使用的中间件 指纹信息---有无cdn加速&#xff0c;dns解析记录&#xff0…

MailChecker:一款功能强大的跨语言临时电子邮件安全检测库

关于MailChecker MailChecker是一款功能强大的跨语言临时电子邮件安全检测工具&#xff0c;该工具可以帮助广大研究人员快速对目标电子邮件进行安全检测和内容验证。该工具后端由一个包含了超过55000个的虚假电子邮件提供商的数据库驱动&#xff0c;当你需要使用电子邮件与你的…

Linux---优先级+并发+进程调度队列

目录 一、优先级 二、并发 三、Linux2.6内核进程调度队列 一、优先级 我们发现操作系统中有很多等待队列&#xff0c;也就是说进程需要排队&#xff0c;而排队的本质就是确认优先级&#xff0c;优先级高的排在前面&#xff0c;低的排在后面 为什么要有优先级&#xff1f; 本…

接口测试学习笔记

文章目录 认识urlhttp协议接口规范Postman实现接口测试设计接口测试用例使用软件发送请求并查看响应结果Postman 自动关联Postman如何提交multipart/form-data请求数据Postman如何提交查询参数Postman 如何批量执行用例单接口测试Postman 断言Postman参数化 接口测试自动化requ…

STM32的以太网外设+PHY(LAN8720)使用详解(4):STM32管脚配置

0 工具准备 1.野火 stm32f407霸天虎开发板 2.LAN8720数据手册 3.STM32F4xx中文参考手册1 MCU管脚配置 1.1 使能外设相关时钟 STM32配置任何外设的第一步都是使能相关的外设时钟&#xff0c;根据前面的原理图我们需要使能相关的引脚时钟&#xff0c;同时我们需要使能SYSCFG时…

2023年终总结 | 四平八稳

年度回顾 年度关键词&#xff1a;四平八稳 百科解读&#xff1a;形容物体放置的平稳或言行稳当&#xff1b;也指做事但求无过&#xff0c;不思进取。 我在写这篇文章就在思考用什么关键词来描述我过去这一年&#xff0c;似乎这一年没有特别让我特别惊喜的事情&#xff0c;无论是…

网工内推 | 华晨宝马、金士顿,最高16薪招网工,NP以上优先

01 华晨宝马汽车有限公司 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1&#xff0c; 参与公司数字化建设&#xff0c;负责厂区生产区域和办公区域的网络规划、建设和优化&#xff0c;包括有线网络和无线网络&#xff1b; 2&#xff0c; 提供公司数据中心架构规划&a…

「Verilog学习笔记」自动售卖机

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 timescale 1ns/1nsmodule sale(input clk ,input rst_n ,input sel ,//sel0,5$dranks,sel1,10&$drinksinput …

react当中生命周期(旧生命周期详解)

新生命周期https://blog.csdn.net/kkkys_kkk/article/details/135156102?spm1001.2014.3001.5501 目录 什么是生命周期 react中的生命周期 旧生命周期 生命周期图示 常用的生命周期钩子函数 初始化阶段 挂载阶段 在严格模式下挂载阶段的生命周期函数会执行两次原因 更…

RocketMQ高级原理:深入剖析消息系统的核心机制

一、基础概念&#xff1a; 1. 消息模型 RocketMQ基于Producer、Broker、Consumer三部分构建。其中&#xff0c;Producer负责生成消息&#xff0c;Consumer处理消息&#xff0c;而Broker则承担消息存储的角色。Broker服务器可以存储多个Topic的消息&#xff0c;并支持消息在不同…

核货宝订单管理系统提高企业效率

核货宝订单管理系统可以帮助企业提高效率&#xff0c;具体体现在以下几个方面&#xff1a; 一、订单自动化处理&#xff1a;核货宝订单管理系统支持订单批发和多渠道订单导入&#xff0c;它可以从订单的接收、处理、跟进、发货、到售后服务等环节都可以通过系统自动完成&#x…

求职方略-倒金字塔型自我介绍

第一步,开头第一句话提纲挈领,点出你的主要“卖点” 自我介绍的第一句话很重要,要有足够的吸引力,有足够的信息量,还要有足够的说服力,能产生先声夺人的效果。 一般的自我介绍喜欢按照时间线索依次介绍自己的经历,例如:“我大学毕业后就进入一家大公司的研发中心,工…

云渲染怎么批量效果图、影视动画?云渲染在效果图、影视的作用

在设计和建筑领域&#xff0c;设计师往往需要制作出精细逼真的效果图以向客户展示他们的设计思路。然而&#xff0c;在这些行业中&#xff0c;大量生成效果图需求非常费时费力。幸运的是&#xff0c;日期到了云渲染的这个时代&#xff0c;设计师们可以通过云渲染服务以一种更加…

第51周,第二期技术动态

大家好&#xff0c;才是真的好。 今天周五&#xff0c;我们主要介绍与Domino相关产品新闻&#xff0c;以及互联网或其他IT行业动态等。 一、HCL Domino 14 Factory 上周三&#xff0c;即2023 年 12 月 13 日&#xff0c;HCL Notes Domino 14在日本举办了第一个线下产品巡回活…

PS里面怎么提取图上要的颜色然后用到另一个部位去

PS里面要提取图上要的颜色然后用到另一个部位去&#xff0c;具体步骤如下&#xff1a; 在ps里打开特定的图像文件&#xff1b; 想要提取图上的哪个颜色&#xff0c;就使用”吸管工具“在图上特定的位置上点击一下&#xff0c;就会看到前景色变成了相应的颜色&#xff1b; 然…