Python使用plot()函数画图进阶使用

2023-11-14

目录

使用介绍

plot()函数进阶使用

(1)全局信息代码

(2)绘图代码

(1)画布设置

(2)函数传入参数设置

(3)函数内部代码解读

(4)函数调用

(5)plt.tight_layout()函数的使用

(6)最后做出图形如下


使用介绍

在前文《Python直接使用plot()函数画图》提到了matplotlib库中最简单的一个函数plot()函数,介绍plot()最简单的使用方法,包括plot()函数中的参数,画布的基础设置,简单的数据代入画图,本次进阶使用,我们会将其中的参数通过函数方法进行画图的设置,同时也会讲解多个折线图的绘画以及对数据的选择。

使用函数画图有调用图形方便,参数设置简洁,代码复用性高等优点。

本次画图使用到的数据是2001年到2021年的作物产量变化数据。数据含有统计时间、粮食产量(万吨)、粮食产量增长(%)、棉花(万吨)、棉花增长(%)、油料(万吨)、油料增长(%)。

plot()函数进阶使用

实验要求:画出粮食、油料折线走势图和粮食、油料增长率走势图

绘图要求:标签清晰,两在一个画布中呈现,设置图例,添加私人标签

(1)全局信息代码

# 导入所需模块
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings

# 设置全局变量
warnings.filterwarnings("ignore")
plt.rcParams['font.sans-serif'] = ['Microsoft Yahei']
plt.rcParams['axes.unicode_minus'] = False

#数据读入
df = pd.read_excel(r'作物产量.xls')

①导入数据处理相关库(pandas、numpy)导入画图库(matplotlib)

②设置警告过滤器:警告过滤器【warnings.filterwarnings("ignore")】

用于控制警告消息的行为,如忽略,显示或转换为错误(引发异常)

其中参数ignore是忽略匹配的警告

③plt.rcParams设置参数

plt.rcParams['font.sans-serif']运行配置参数中的字体(font)为微软雅黑

plt.rcParams['axes.unicode_minus'] = False #运行配置参数总的轴(axes)正常显示正负号(minus)

(2)绘图代码

# 将每一组数据画到同一个坐标子图中

f,(ax1,ax2) = plt.subplots(2,1,figsize=(6,6),dpi=100)
def draw_a(ax,df,x_col=0,y_cols=[1],colors=None,makers=None,title='',myname='',ylabel=''):
    X = df.iloc[:,x_col]  # Series
    Y = df.iloc[:,y_cols]
    title = "【"+myname+"】" + title
    xlabel = "【"+myname+"】" + df.columns[x_col]
    ylabel = "【"+myname+"】" + ylabel

    for i in Y.columns:
        ax.plot(X,Y[i],label=i)
        ax.set_xlabel(xlabel)
        ax.set_ylabel(ylabel)
        ax.set_xticklabels(X,rotation=90,fontsize=8)
        ax.set_yticklabels(ax.get_yticks(),fontsize=8)
        ax.set_title(title)
        ax.legend()

draw_a(ax1,df,x_col=0,y_cols=[1,5],title="2001-2021年粮食、油料产量走势折线图",myname='xxx',ylabel='产量')  # 每次调用只在一个子图中绘图
draw_a(ax2,df,x_col=0,y_cols=[2,6],title="2001-2021年粮食、油料增长率走势折线图",myname='xxx',ylabel='增长率')  # 每次调用只在一个子图中绘图
plt.tight_layout()

我们从上往下对本次实验的代码进行讲解。

(1)画布设置

f,(ax1,ax2) = plt.subplots(2,1,figsize=(6,6),dpi=100)

它是用来创建 总画布/figure“窗口”的,有figure就可以在上边(或其中一个子网格/subplot上)作图了,(fig:是figure的缩写)

前面的2,1是创造一个两行一列的子图,相当于有两个图,竖着放的两个图。

figsize=(6,6):画布大小6*6

dpi=100:画布的像素

此处我们要画两个图所以在画布设置的前面使用的是ax1,ax2,f是figure窗口的意思,ax1,ax2是数据参数。

(2)函数传入参数设置

draw_a是建立的函数名可根据自己选择定义,括号内为传入参数描述,可在引用的时候自己更改。

ax:传入画布参数

df:传入数据参数

x_col:x轴索引参数,也是数据筛选所需要用的参数,此处用来赛选X轴数据,由下图可知他的筛选是列索引的形式,不包含列名

y_cols:y轴索引参数,此处每个图都有两组数据,是两组数据的组合,因此在调用的时候是[1,5]形式。

 colors、mark:是图形线条的颜色和形状

title:图文标题

myname:个人信息标签

ylabel:y轴标签名,因为x轴标签都一样因此只设置y轴标签

(3)函数内部代码解读

①筛选数据

筛选出X,Y轴的数据的数据

X = df.iloc[:,x_col]  # Series
Y = df.iloc[:,y_cols]

②设置X轴、Y轴标签、标题

title = "【"+myname+"】" + title
xlabel = "【"+myname+"】" + df.columns[x_col]
ylabel = "【"+myname+"】" + ylabel

③循环将数据参数传入画布子图中

通过ax.plot函数传入数据,ax.set_设置部分,将要设置的参数传入函数,其中ax.set_xticklabels()函数是设置x、y轴刻度的样式,rotation是刻度值旋转度数,fontsize是刻度大小设置,ax.get_yticks()返回y刻度作为位置列表,ax.legend()是设置图例

    for i in Y.columns:
        ax.plot(X,Y[i],label=i)
        ax.set_xlabel(xlabel)
        ax.set_ylabel(ylabel)
        ax.set_xticklabels(X,rotation=90,fontsize=8)
        ax.set_yticklabels(ax.get_yticks(),fontsize=8)
        ax.set_title(title)
        ax.legend()

(4)函数调用

通过直接使用draw_a(参数数值):此处参数没有设置初始值的必须传入参数,设置初始值的参数可以不用参入也可以传入参数,这个是Python中自定义函数的使用以及参数变量的使用问题。

(5)plt.tight_layout()函数的使用

tight_layout会自动调整子图参数,使之填充整个图像区域。这是个实验特性,可能在一些情况下不工作。它仅仅检查坐标轴标签、刻度标签以及标题的部分。 当你拥有多个子图时,你会经常看到不同轴域的标签叠在一起。

(6)最后做出图形如下

(码字不易点个关注不迷路)

(文章问题、个人问题私信)

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

Python使用plot()函数画图进阶使用 的相关文章

随机推荐

  • 高效的学习方法(几个小技巧)

    几个学习小技巧 1 价值导向性学习法 发现 赋予学习内容意义或者使命感 价值导向性学习法是一种高效的思维方式 可以传递出这样的一种观点 学习上有意义 有价值的行为 而不是消极的 被动式的学习 首先 最重要的是赋予学习内容以意义 其次 定制清
  • RK3399 ,64位,Ubuntu16.04系统安装ROS-kinetic方法总结

    1 第一步是修改hosts vi etc hosts 在127 0 0 1 localhost 后边添加 rpdzkj 自己的ubuntu用户名 127 0 0 1 localhost rpdzkj 设置sources list 我选择的是
  • LaTeX公式符号总结(Markdown适用)

    文章目录 1 希腊字母 小写字母 大写字母 2 符号 箭头符号 二元运算符 逻辑符号 集合符号 特殊符号 3 运算和函数 4 矩阵和多行列式 5 括号与空格 6 颜色 字体颜色 背景颜色 RGB颜色和自定义 默认支持颜色 本文从 Typor
  • 开发日记(4)如何将Bitmap转换成Uri?

    1 bitmap to uri Uri uri Uri parse MediaStore Images Media insertImage getContentResolver bitmap null null 2 uri to bitma
  • 阿里:MySQL 单表数据最大不要超过多少行?为什么?

    点击上方 芋道源码 选择 设为星标 管她前浪 还是后浪 能浪的浪 才是好浪 每天 10 33 更新文章 每天掉亿点点头发 源码精品专栏 原创 Java 2021 超神之路 很肝 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网
  • 2023AIGC人才趋势洞察报告

    导读 自ChatGPT于2022年11月发布至今 其大大超出预期的 涌现 能力使得AIGC赛道被彻底点燃 从人力资源角度观察 AIGC相关的岗位明显增加的同时 人才对于此类岗位的投递也愈发积极 值得注意的是 AIGC并不单单是属于ICT行业
  • iOS APP 如何做才安全

    本来 写了一篇 iOS 如何做才安全 逆向工程 Reveal IDA Hopper https抓包 等 发现文章有点杂 并且 iOS 如何做才安全 这部分写的越来越多 觉得 分出来更清晰一点 所以拆成两部分 同时也是为了大家能 共同讨论 毕
  • osgEarth加载SXEarth下载的mbtiles地图文件(win10)

    使用晟兴地球 SXEarth 通过互联网下载mbtiles格式的地图文件 然后使用osgEarth加载 晟兴地球 SXEarth 下载地图文件 晟兴地球SXEarth是一款永久免费的3DGIS平台软件 由北京晟兴科技有限公司开发 支持在线G
  • 二分法,平衡二叉树、B树、B+树

    二分法 平衡二叉树 B树 B 树 二分法 二分法查找 算法要求 比较次数 二分法到二叉树 平衡二叉树 平衡二叉树概念 平衡二叉树的构建规则 平衡二叉树特点 B树 B tree B树的构建规则 B树的查询流程 B 树 B 树构建规则 B 树和
  • 【华为OD机试 2023】货币单位换算(C++ Java JavaScript Python)

    华为od机试题库 华为OD机试2022 2023 C Java JS Py https blog csdn net banxia frontend category 12225173 html 华为OD机试2023最新题库 更新中 C Ja
  • 成功解决Win7 64位系统下GraphEdit 不能显示Directshow.net远程图表的问题

    首先问题如题 我是Win7 64位旗舰版操作系统 VS2010 使用Directshow net开发播放器程序 结果发现通过以前使用的GraphEdit无论如何不能看到远程图表 不管是重新注册spy dll PropPage dll等文件
  • 倒沖法-線邊倉

    倒冲法 倒冲法 Back flush 目录 隐藏 1 倒冲法概述 2 倒冲法的应用 3 倒冲法的隐性会计处理 1 4 倒冲错误的产生原因及处理程序 1 5 参考文献 编辑 倒冲法概述 倒冲法 Back flush 是ERP系统根据产成品收料
  • git错误 error: failed to push some refs to ‘https://github.com/...

    1 解决办法 git错误 error failed to push some refs to https github com 问题原因 远程库与本地库不一致造成的 在hint中也有提示把远程库同步到本地库就可以了 解决办法 使用命令行 g
  • Orange pi3 LTS Ubuntu22.04通过源码编译的方式安装opencv(C++版)

    硬件 orangepi 3 LTS 之前安装opencv的时候遇到了很多奇奇怪怪的错误 所以干脆重新写入系统后开始安装 安装Ubuntu22 04的过程按照官方提供的用户手册来操做 官方用户手册下载链接 http www orangepi
  • C++基础知识 - explicit 关键字

    explicit 关键字 作用是表明该构造函数是显示的 而非隐式的 不能进行隐式转换 跟它相对应的另一个关键字是implicit 意思是隐藏的 类构造函数默认情况下即声明为implicit 隐式 include
  • Ansible自动化运维工具学习-第二天

    Ansible入门学 第二天 前言 亲爱的小伙伴 如果你已经阅读了博主的Ansible 第一天相信你应该对Ansible有了一定的了解 不知道关于如何利用Ansible实现集群归档备份你有没有学会呢 今天暂且不谈Ansible的各个模块 因
  • Neo4j 数据导入导出

    前提条件 切换至neo4j 安装目录的bin 文件夹 D neo4j neo4j community 3 4 6 bin 或者配置全局环境变量 执行数据导出命令 neo4j admin dump database graph db to s
  • [Vue warn]: Cannot find element: #app

    解决方案 js在html页面头部引入的原因 自定义js文件要最后引入 因为要先有元素id vue才能获取相应的元素
  • 消息队列中间件 - Docker安装RabbitMQ、AMQP协议、和主要角色

    概述 不管是微服务还是分布式的系统架构中 消息队列中间件都是不可缺少的一个重要环节 主流的消息队列中间件有RabbitMQ RocketMQ等等 从这篇开始详细介绍以RabbitMQ为代表的消息队列中间件 AMQP协议 AMQP协议是一个提
  • Python使用plot()函数画图进阶使用

    目录 使用介绍 plot 函数进阶使用 1 全局信息代码 2 绘图代码 1 画布设置 2 函数传入参数设置 3 函数内部代码解读 4 函数调用 5 plt tight layout 函数的使用 6 最后做出图形如下 使用介绍 在前文 Pyt