当前位置: 首页 > news >正文

Matplotlib光速入门-从安装到常用实战

文章目录

  • 简介
  • 安装
  • 实战
    • 画框
    • 线图
    • 散点图
    • 柱状图
    • 饼状图
    • 等高线图

在这里插入图片描述

简介


Matplotlib是Python一个强大的绘图库,搭配NumPy库的使用,可以满足绝大部分的绘图需求,各种你能想到的图表基本都支持,使用代码即可进行绘制,如果画不出来那一定是你的问题(doge)。

本文主要参考Matplotlib文档,归纳总结Matplotlib常用方法,只举例了部分,所有函数和相关参数不能遍举,更多可参考Matplotlib文档。

安装


如果使用pip安装:

pip install matplotlib

如果使用conda安装:

conda install matplotlib

如果使用的是Pycham,可以直接打开File->settings->Project:->Python Interpreter中安装库。
在这里插入图片描述
搜索matplotlib,点击安装即可。

在这里插入图片描述
在这里插入图片描述

实战

画框


fig是Figure缩写,即外框,可以包含多个内框。ax是Axes缩写,即内框,里面可以画各种图。plt是导入Matplotlib库时的重命名缩写,可以理解为一整张画布,直接添加即可,但细节修改用ax更好。
两种方法都可,比如以下代码是等价的:

import matplotlib.pyplot as plt
fig, ax = plt.subplots()  # 创建一个外框(默认含一个内框),返回两个参数
ax.plot([1, 2], [1, 2])  # 在内框上画一条直线,点(1,1)到(2,2)
plt.show()  # 显示绘图
import matplotlib.pyplot as plt
plt.plot([1, 2], [1, 2])
plt.show()

在这里插入图片描述

如一张画布上多个画框:

from matplotlib import pyplot as plt

# subplot三个参数:垂直方向画几张图,水平方向画几张图,当前是第几张图
plt.subplot(2, 2, 1)  # 即划分1×2个画框,当前是第一个
plt.title("1")
plt.subplot(2, 2, 2)  # 当前为第2个
plt.title("2")
plt.subplot(2, 2, 3)  # 当前为第3个
plt.title("3")
plt.subplot(2, 2, 4)  # 当前为第4个
plt.title("4")
plt.subplots_adjust(wspace=0.5, hspace=0.5)  # 调整间距

plt.show()

在这里插入图片描述

引用官网的一张图,除了数据外,一张图表还包含了很多元素,如标题(Title)、说明(Legend)、刻度(Minor tick)、刻度名(Minor tick label)、网格(Grid)、标记(Marker)、x轴y轴等。
在这里插入图片描述

相关元素的设置可以参考上图或文档,举个栗子:

import numpy as np
from matplotlib import pyplot as plt

plt.title("我的图表")  # 设置图表名
plt.xlabel("X轴[mm]")  # 设置x轴名
plt.ylabel("Y轴[cm]")  # 设置y轴名
plt.rcParams['font.sans-serif'] = ['SimHei']  # 设置字符编码
plt.rcParams['axes.unicode_minus'] = False  # 编码正常显示负号
plt.xticks(np.arange(0, 60, 5))  # x刻度,从0-60,间隔5
plt.yticks(np.arange(0, 15, 1))  # y刻度,从0-15,间隔1
# x和y的值,即连接点(10,2)、(25,7)、(50,13),设置颜色等可选参数
plt.plot([10, 25, 50], [2, 7, 13], label="折线", color="#FF0000")
plt.legend()  # 显示说明
plt.grid()  # 显示网格
plt.show()  # 显示绘图

在这里插入图片描述

插播反爬信息 )博主CSDN地址:https://wzlodq.blog.csdn.net/

线图


使用plot()函数。

import numpy as np
from matplotlib import pyplot as plt

#  ------直线------
plt.plot([0, 10], [0, 5], label="直线", linewidth="3")  # 线宽设置3
#  ------抛物线------
x = np.linspace(0, 10, 100)  # 1-10均匀序列
plt.plot(x, 0.05*x*x, label="抛物线")
#  ------三角函数------
plt.plot(x, np.sin(x), label="正弦曲线")
plt.plot(x, np.cos(x), label="余弦曲线")
#  其他的举一反三,给出函数和定义域即可
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.legend()
plt.show()

在这里插入图片描述
各种线条格式:

import numpy as np
from matplotlib import pyplot as plt

x = np.linspace(1, 10, 30)
plt.plot(x, x, '-')
plt.plot(x, x+1, '--')
plt.plot(x, x+2, '-.')
plt.plot(x, x+3, 'o')
plt.plot(x, x+4, ',')
plt.plot(x, x+5, 'x')
plt.plot(x, x+6, 'd')
plt.plot(x, x+7, '<')
plt.plot(x, x+8, '>')
plt.plot(x, x+9, 'v')
plt.plot(x, x+10, '+')
plt.plot(x, x+11, '*')
plt.plot(x, x+12, '-')
plt.plot(x, x+13, 'h')
plt.plot(x, x+14, '|')
plt.plot(x, x+15, '1')
plt.plot(x, x+16, '2')
plt.plot(x, x+17, '3')
plt.plot(x, x+18, '4')
plt.plot(x, x+19, '8')

plt.show()

在这里插入图片描述

散点图


使用scatter()函数。

import numpy as np
from matplotlib import pyplot as plt
plt.figure(figsize=(10, 5))
# ------均匀分布------
plt.subplot(1, 2, 1)
plt.title("均匀分布")
n = 800  # 样本数
x = np.random.rand(n)  # 随机坐标点
y = np.random.rand(n)
colors = np.random.rand(n)  # 随机颜色
size = np.random.rand(n)*100  # 随机大小
plt.scatter(x, y, c=colors, s=size, alpha=0.3)  # alpha是透明度
# ------正态分布------
plt.subplot(1, 2, 2)  # 第二个画框
plt.title("正态分布")
x = np.random.randn(n)
y = np.random.randn(n)
plt.scatter(x, y, c=colors, s=size, alpha=0.3)

plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.show()

在这里插入图片描述

柱状图


使用bar()函数。

import numpy as np
from matplotlib import pyplot as plt
plt.figure(figsize=(10, 5))
# ------图1------
plt.subplot(1, 2, 1)
x = np.arange(8)  # 1-5
y = np.random.randint(-3, 5, 8)  # -3到5随机8个数
plt.bar(x, y, width=0.6)
plt.title('图2')
plt.axhline(0)  # 水平线
# ------图2------
plt.subplot(1, 2, 2)
x = np.arange(3)  # 1-3
width = 0.2  # 设置柱宽
plt.bar(x, [4, 6, 2], color='green', width=width, label="A")
plt.bar([i+width for i in x], [3, 7, 4], color='blue', width=width, label="B")
plt.bar([i+2*width for i in x], [5, 6, 4], color='red', width=width, label="C")
plt.xticks([i+width for i in x], ["2020", "2021", "2022"])  # 设置刻度
plt.title('图2')

plt.legend()
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.show()

在这里插入图片描述
还可以使用hist()函数。

import numpy as np
from matplotlib import pyplot as plt

x1 = np.random.normal(2.5, 0.5, 1000)  # 期望2.5,标准差0.8,输出大小1000
x2 = np.random.normal(5, 2, 1000)
x3 = np.random.normal(7.5, 1, 1000)
plt.hist(x1, bins=100, alpha=0.5, label="A")  # 100个数据,透明的0.5,标签A
plt.hist(x2, bins=100, alpha=0.5, label="B")
plt.hist(x3, bins=100, alpha=0.5, label="C")

plt.legend()
plt.show()

在这里插入图片描述

饼状图


使用pie()函数。

from matplotlib import pyplot as plt

# explode分裂,autopct百分比格式
plt.pie([0.4, 0.6], labels=["A", "B"], explode=(0, 0.05), autopct='%0.0f%%')
plt.legend()
plt.show()

在这里插入图片描述

等高线图


使用contourf函数。

import numpy as np
from matplotlib import pyplot as plt
# ------数据------
x = np.linspace(-3, 3, 256)  # -3到3等差256个点
y = np.linspace(-3, 3, 256)
X, Y = np.meshgrid(x, y)  # 计算x和y的相交点
Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2)  # 计算Z的坐标
levels = np.linspace(Z.min(), Z.max(), 7)
# ------图1------
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.contour(X, Y, Z)
# ------图2------
plt.subplot(1, 2, 2)
plt.contourf(X, Y, Z)

plt.show()

在这里插入图片描述

原创不易,请勿转载本不富裕的访问量雪上加霜
博主首页:https://wzlodq.blog.csdn.net/
来都来了,不评论两句吗👀
如果文章对你有帮助,记得一键三连❤

相关文章:

  • 课设总结【硬件课设】
  • 你这个视频背景太假了?
  • 一文搞懂cookie、session、token、jwt、OAuth
  • 《Go Web 编程》之第4章 处理请求
  • ZYNQ之中断机制
  • Java JDK path环境变量配置
  • linux编译安装 php-nginx-mysql
  • 个人收入理财App的设计与实现
  • 【OpenStack云平台】网络控制节点 HA 集群配置
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • 基于node.js+Vue在线电子商务购物商城系统 Element
  • CVPR 2022:Generalized Few-shot Semantic Segmentation 解读
  • d二进制字面
  • 使用docker安装mysql
  • Vue.js入门教程(四)
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • co.js - 让异步代码同步化
  • crontab执行失败的多种原因
  • es的写入过程
  • Git初体验
  • Java 内存分配及垃圾回收机制初探
  • Mocha测试初探
  • Octave 入门
  • orm2 中文文档 3.1 模型属性
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Spring Cloud中负载均衡器概览
  • Stream流与Lambda表达式(三) 静态工厂类Collectors
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • Vue实战(四)登录/注册页的实现
  • 你不可错过的前端面试题(一)
  • 前端_面试
  • 强力优化Rancher k8s中国区的使用体验
  • 如何优雅地使用 Sublime Text
  • 我感觉这是史上最牛的防sql注入方法类
  • 延迟脚本的方式
  • 终端用户监控:真实用户监控还是模拟监控?
  • 昨天1024程序员节,我故意写了个死循环~
  • ​批处理文件中的errorlevel用法
  • #《AI中文版》V3 第 1 章 概述
  • #etcd#安装时出错
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #ubuntu# #git# repository git config --global --add safe.directory
  • (1)常见O(n^2)排序算法解析
  • (2020)Java后端开发----(面试题和笔试题)
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (二)c52学习之旅-简单了解单片机
  • (二)Linux——Linux常用指令
  • (三分钟)速览传统边缘检测算子
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • .CSS-hover 的解释
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件