Matplotlib引领数据图表绘制

news2024/11/24 5:21:09

Matplotlib引领数据图表绘制

  • 前言
  • 图像得组成
  • 画图
    • 设置 figure
    • 设置标题
    • 设置坐标轴
    • 设置 label 和 legend
    • 添加注释
    • 使用子图
    • 中文乱码解决
    • 保存图形
    • 显示图形
    • 条形图
    • 直方图
    • 散点图
    • 饼状图
  • 总结

前言

在数据科学领域,数据可视化是一种强大的工具,能够将复杂的数据转化为易于理解和分析的图形。Matplotlib作为Python中最流行的数据可视化库,为我们提供了丰富的绘图功能和灵活的绘图选项。本文将深入探索Matplotlib。

图像得组成

下面张图片来自matplotlib官网,简单说明一下图片得组成;

  • figure:画布,一张图片得整体轮廓
  • Axes:数轴,一张画布上可以画多张图片
  • axis:坐标轴,通常得x轴,y轴等
  • tick:刻度,坐标轴上得刻度
  • title: 图片得标题
  • legend:图例
  • grid: 网格
  • label:标签说明
    在这里插入图片描述

画图

画图之前要导入matplotlib库和numpy库;

# 导入相关模块 
import matplotlib.pyplot as plt 
import numpy as np

设置 figure

Matplotlib 绘制的图形都在一个默认的 figure 中,我们可以自己创建 figure,可以控制更多的参数,常见的就是控制图形的大小

plt.figure(figsize=(6, 3)) 
plt.plot(x, y) 
plt.plot(x, y * 2) 
plt.show()

在这里插入图片描述

设置标题

在当前图形中添加标题,可以指定标题的名称、位置、颜色、字体大小等

plt.plot(x, y) 
plt.plot(x, y * 2) 
plt.title("sin(x) & 2sin(x)") 
plt.show()

在这里插入图片描述

设置坐标轴

  • 通过 xlim 和 ylim 来限定坐标轴的范围,只能确定一个数值区间
  • 通过 xlabel 和 ylabel 来设置坐标轴的名称
  • 通过 xticks 和 yticks 来设置坐标轴的刻度
plt.plot(x, y) 
plt.plot(x, y * 2)
plt.xlim((0, np.pi + 1)) 
plt.ylim((-3, 3)) 
plt.xlabel('X') 
plt.ylabel('Y')
plt.show()

在这里插入图片描述

plt.plot(x, y) 
plt.plot(x, y * 2) 
plt.xticks((0, np.pi * 0.5, np.pi, np.pi * 1.5, np.pi * 2)) 
plt.show()

在这里插入图片描述

设置 label 和 legend

为了区分出每个数据对应的图形名称

plt.plot(x, y, label="sin(x)") 
plt.plot(x, y * 2, label="2sin(x)")
# plt.legend(loc=1) 
plt.legend(loc='best') 
plt.show()

在这里插入图片描述
图例的位置由 loc 关键字控制,其取值范围为 0-10,每个数字代表图表中的一处位置
在这里插入图片描述

添加注释

有时候我们需要对特定的点进行标注,我们可以使用 plt.annotate 函数来实现
  这里我们要标注的点是 (x0, y0) = (π, 0)
  我们也可以使用 plt.text 函数来添加注释

plt.plot(x, y) 
x0 = np.pi 
y0 = 0 
# 画出标注点, s 代表点的大小 
plt.scatter(x0, y0, s=50) 
#添加文本 
plt.text(0, -0.25, "y = sin(x)", fontdict={'size': 16, 'color': 'r'}) 
#添加注释 
plt.annotate('sin(np.pi)=%s' %y0, xy=(np.pi, 0), xycoords='data', xytext=(+30, -30),textcoords='offset points', fontsize=16,             
arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.2")) 
plt.show() 

在这里插入图片描述
对于 annotate 函数的参数,做一个简单解释:

  • ‘sin(np.pi)=%s’ % y0 :标注的内容,可以通过字符串 %s 将 y0 的值传入字符串
  • xycoords=‘data’ :基于数据的值来选位置
  • xytext=(+30, -30) 和 textcoords=‘offset points’ :对于标注位置的描述 和 xy 偏差 \值,即标注位置是   xy 位置向右移动 30,向下移动30;
  • arrowprops :对图中箭头类型和箭头弧度的设置,需要用 dict 形式传入。

使用子图

有时候我们需要将多张子图展示在一起,可以使用 ==subplot() ==实现。即在调用 plot() 函数之前需要先调用 subplot() 函数。该函数的第一个参数代表子图的总行数,第二个参数代表子图的 总列数,第三个参数代表活跃区域

ax1 = plt.subplot(2, 2, 1) # (行,列,活跃区) 
plt.plot(x, np.sin(x), 'r')
ax2 = plt.subplot(2, 2, 2, sharey=ax1) # 与 ax1 共享y轴 
plt.plot(x, 2 * np.sin(x), 'g')
ax3 = plt.subplot(2, 2, 3) 
plt.plot(x, np.cos(x), 'b')
ax4 = plt.subplot(2, 2, 4, sharey=ax3) # 与 ax3 共享y轴 
plt.plot(x, 2 * np.cos(x), 'y')
plt.show()

在这里插入图片描述
可以看到,上面的每个子图的大小都是一样的。有时候我们需要不同大小的子图。比如将上面第一 张子图完全放置在第一行,其他的子图都放在第二行。

ax1 = plt.subplot(2,1,1)
plt.plot(x,np.sin(x),'r')
ax2 = plt.subplot(2,3,4)
plt.plot(x,2*np.sin(x),'g')
ax3 = plt.subplot(2,3,5,sharey=ax2)
plt.plot(x,np.cos(x),'b')
ax4 = plt.subplot(2,3,6,sharey=ax2)
plt.plot(x,2*np.cos(x),'y')

在这里插入图片描述
简单解释下, plt.subplot(2, 1, 1) 将图像窗口分为了 2 行 1 列, 当前活跃区为 1。

  • 使用 plt.subplot(2, 3, 4) 将整个图像窗口分为 2 行 3 列, 当前活跃区为 4。
  • 解释下为什么活跃区为 4,因为上一步中使用 plt.subplot(2, 1, 1) 将整个图像窗口分为 2 行 1 列, 第1个小图占用了第1个位置, 也就是整个第1行. 这一步中使用 plt.subplot(2, 3, 4) 将整个图 像窗口分为 2 行 3 列, 于是整个图像窗口的第1行就变成了3列, 也就是成了3个位置, 于是第2行的 第1个位置是整个图像窗口的第4个位置

中文乱码解决

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

保存图形

保存绘制的图片,可指定图片的分辨率、边缘的颜色等

plt.savafig('存储文件名')  # 记得加后缀,jpg/png 等

显示图形

plt.show()
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10,4),index=pd.date_range('2023/8/4',
   periods=10), columns=list('ABCD'))

df.plot()

执行上面示例代码,得到以下结果 -

在这里插入图片描述
如果索引由日期组成,则调用gct().autofmt_xdate()来格式化x轴,如上图所示。

我们可以使用x和y关键字绘制一列与另一列。

绘图方法允许除默认线图之外的少数绘图样式。 这些方法可以作为plot()的kind关键字参数提供。这些包括 -

  • bar或barh为条形
  • hist为直方图
  • boxplot为盒型图
  • area为“面积”
  • scatter为散点图

条形图

现在通过创建一个条形图来看看条形图是什么。条形图可以通过以下方式来创建 -

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])
df.plot.bar()

在这里插入图片描述
要生成一个堆积条形图,通过指定:pass stacked=True -`

import pandas as pd
df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])
df.plot.bar(stacked=True)

在这里插入图片描述
要获得水平条形图,使用barh()方法 -

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d'])

df.plot.barh(stacked=True)

在这里插入图片描述

直方图

可以使用plot.hist()方法绘制直方图。我们可以指定bins的数量值

import pandas as pd
import numpy as np

df = pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':
np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])

df.plot.hist(bins=20)

在这里插入图片描述
要为每列绘制不同的直方图,请使用以下代码 -

import pandas as pd
import numpy as np

df=pd.DataFrame({'a':np.random.randn(1000)+1,'b':np.random.randn(1000),'c':
np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])

df.hist(bins=20)

在这里插入图片描述

散点图

可以使用DataFrame.plot.scatter()方法创建散点图。



import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(50, 4), columns=['a', 'b', 'c', 'd'])
df.plot.scatter(x='a', y='b')

在这里插入图片描述

饼状图

饼状图可以使用DataFrame.plot.pie()方法创建。

import pandas as pd
import numpy as np

df = pd.DataFrame(3 * np.random.rand(4), index=['a', 'b', 'c', 'd'], columns=['x'])
df.plot.pie(subplots=True)

在这里插入图片描述

总结

Matplotlib是数据科学中不可或缺的工具,它为我们提供了丰富的绘图功能和定制选项,使得数据的可视化变得轻松而有趣。通过学习和应用Matplotlib,我们能够将复杂的数据转化为直观的图表,更好地理解数据,支持决策和分析。

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

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

相关文章

Redis单机,主从,哨兵,集群四大模式

Redis 单机模式 Redis 单机模式是指 Redis 数据库在单个服务器上以独立的、单一的进程运行的模式。在这种模式下,Redis 不涉及数据分片或集群配置,所有的数据和操作都在一个实例中进行。以下是关于 Redis 单机模式的详细介绍: 单一实例&#…

数据连接,图文档与BOM数据紧密相连

在现代制造业的产品开发和生产过程中,图文档和BOM数据是不可或缺的重要信息。图文档记录了产品的设计和工程数据,而BOM数据明确了产品所需物料的清单和规格。然而,由于图文档和BOM数据分属不同的系统,数据之间的连接和共享往往成为…

赢在起跑线:美国计算机读研规划攻略

以下是一个去美国学计算机的读研规划,供您参考:01 基础准备 学术准备:在本科阶段,您需要确保已经掌握了计算机科学的基本知识和技能,包括计算机体系结构、编程语言、数据结构和算法等。同时,建议您参与一…

[学习笔记]微信小程序全套开发流程(ing)

https://www.bilibili.com/video/BV1mV4y1o7fu 1.整体概述 2.环境搭建 略 4.纯净版项目 5.快速入门 5.1组件(类似HTML标签) wxml中的标签html中的标签textspanviewdivimageimgiconnavigatora view组件 <view><view class"c0">学生&#xff1a;<…

怎样理解黑盒测试和白盒测试?二者有什么关系

按照使用的测试技术可以将软件测试分为黑盒测试与白盒测试。 &#xff08;1&#xff09;黑盒测试 黑盒测试就是把软件(程序)当作一个有输入与输出的黑匣子&#xff0c;它把程序当作一个输入域到输出域的映射&#xff0c;只要输入的数据能输出预期的结果即可&#xff0c;不必关…

吉利科技携手企企通,打造集团化数智供应链系统

近日&#xff0c;吉利科技集团有限公司&#xff08;以下简称“吉利科技”&#xff09;联合企企通成功召开SRM采购供应链管理项目启动会。企企通与吉利科技高层、项目负责人与团队成员出席此次启动会。 双方将携手在企业供应商全生命周期管理、采购全流程、电子招投标、采购分析…

打造本地户外装备小程序商城教程大揭秘

在如今的移动互联网时代&#xff0c;小程序已经成为了各行各业的发展利器。尤其对于户外用具行业来说&#xff0c;一个专属的小程序商城将能够极大地提升企业的品牌形象和销售业绩。下面就来介绍一下快速上手制作户外用具小程序的攻略吧。 首先&#xff0c;登录乔拓云平台进入商…

TDengine + Telegraf + Grafana 实现图形化服务器状态监控

TDengine Telegraf Grafana 实现图形化服务器状态监控 技术栈环境搭建安装tdenginue下载安装包解压文件运行安装文件启动td运行 taosAdapter 安装Telegraf添加yum源安装生成配置文件修改配置文件启动telegraf 安装Grafana直接yum安装安装td数据源配置启动Grafana配置数据源导…

2021年12月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题(共25题,每题2分,共50分) 第1题 昨天的温度是5摄氏度,今天降温7摄氏度,今天的温度是多少摄氏度? A:12 B:7 C:2 D:-2 正确的答案是 D:-2。 解析: 根据题目描述,昨天的温度是 5 摄氏度,今天降温了 7 摄氏度。降温意味着温度变低,所以今天的温度…

嵌入式开发实用工具——QFSViewer

嵌入式开发实用工具——QFSViewer 介绍 今天给大家推荐个我个人业余时间开发的一个嵌入式开发实用工具——QFSViewer&#xff0c;这个工具主要是用来加载查看各种嵌入式常用的文件系统映像&#xff0c;目前支持JFSS2、Fat32、Fat16、Fat12、exFat、Ext2、Ext3、Ext4等文件系统…

性能测试之性能测试指标详解(详细)

前言 刚开始&#xff0c;以为做性能测试&#xff0c;就是做些脚本、参数化、关联&#xff0c;压起来之后&#xff0c;再扔出一个结果。 但实际上不止这些内容&#xff0c;还要加上性能分析&#xff0c;关注调优之后响应时间有多大的提升&#xff0c;TPS 有多大的提高&#xf…

区块链学习6-长安链部署:如何创建特定共识节点数和同步节点数的链

正常prepare的时候只支持4 7 13 16个节点个数&#xff0c;想要创建10个节点&#xff0c;其中5个是共识节点&#xff0c;如何实现&#xff1f; 1. 注释掉prepare.sh的这几行&#xff1a; 2. 修改 crytogen的模板文件&#xff1a; 如果是cert模式&#xff1a;chainmaker-crypt…

CTF流量题解tcp1

用流量工具进行分析。发现消息长度有点异常。右键TCP跟踪。 ....mos.-mos-.-.mos-.-mos..-.mos..-mos-. 摩斯密码生成-网页工具 (adminun.com)

LeetCode刷题笔试(一起来算法打卡吧!!!)

文章目录 力扣刷题笔记&#xff08;每日更新~&#xff09;一、什么是时间复杂度&#xff1f;二、什么是递归&#xff1f;三、刷题记录leetcode 70-爬楼梯剑指offer 10-斐波那契数列 四、参考地址 力扣刷题笔记&#xff08;每日更新~&#xff09; 提示&#xff1a;这里可以添加…

PY32F003 FLASH

了解py32芯片的flash内容&#xff0c;对于py32进行api升级有更好的了解的操作 //uiOffset 0(4MHz), 1(8MHz), 2(16MHz), 3(22.12MHz), 4(24MHz) void SetFlashParameter(uint32_t uiOffset) {WRITE_REG(FLASH->KEYR, FLASH_KEY1);WRITE_REG(FLASH->KEYR, FLASH_KEY2); …

Android Studio翻译插件

进入File->Settings->Plugins界面&#xff0c;搜索Translation&#xff0c;选择这个 重启AS后&#xff0c;选中目标单词右键点击Translate即可&#xff1a;

MYSQL06高级_为什么使用索引、优缺点、索引的设计、方案、聚簇索引、联合索引、注意事项

文章目录 ①. 为什么使用索引②. 索引及其优缺点③. InnoDb - 索引的设计④. InnoDb中的索引方案⑤. 索引 - 聚簇索引⑥. 索引 - 二级索引⑦. B树索引的注意事项⑧. MyISAM中索引方案 ①. 为什么使用索引 ①. 索引是存储引擎用于快速找到数据记录的一种数据结构,就好比去图书馆…

pytest测试框架之mark标记功能详细介绍

mark标记 ​ 在实际工作中&#xff0c;我们要写的自动化用例会比较多&#xff0c;也不会都放在一个py文件中&#xff0c;如果有几十个py文件&#xff0c;上百个方法&#xff0c;而我们只想运行当中部分的用例时怎么办&#xff1f; ​ pytest提供了一个非常好用的mark功能&…

机械厂工厂360全景展示拍摄制作,以便随时随地进行展示和更新

随着5G互联网技术的不断发展&#xff0c;线上全景虚拟展示已经成为了一种重要的展示方式。在工业领域中&#xff0c;厂区线上全景虚拟展示的应用也越来越广泛。 厂区线上vr全景虚拟展示是VR全景制作公司公司借助VR全景和web3d开发技术把企业的环境、研发、生产、产品、质检、仓…

06-2_Qt 5.9 C++开发指南_自定义对话框及其调用

本篇介绍到的对话框及其调用实例较为复杂但十分详细&#xff0c;如果做了解可以先参考&#xff1a;QT从入门到实战x篇_13_模态和非模态对话框创建。 文章目录 1. 对话框的不同调用方式2. 对话框QWDialogSize 的创建和使用2.1 创建对话框QWDialogSize2.2 对话框的调用和返回值 …