文章目录
matplotlib绘图详解
一、 基础准备
1、 matplotlib简介
Matplotlib是一个Python 2D绘图库,它以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形。 Matplotlib可用于Python脚本,Python和IPython (opens new window)Shell、Jupyter (opens new window)笔记本,Web应用程序服务器和四个图形用户界面工具包。
Matplotlib 尝试使容易的事情变得更容易,使困难的事情变得可能。 您只需几行代码就可以生成图表、直方图、功率谱、条形图、误差图、散点图等。 更多的示例,请参见基础绘图例子和示例陈列馆。
为了简单绘图,该 pyplot
模块提供了类似于MATLAB的界面,尤其是与IPython结合使用时。 对于高级用户,您可以通过面向对象的界面或MATLAB用户熟悉的一组功能来完全控制线型,字体属性,轴属性等。
2、 环境准备
2.1 安装
pip install matplotlib # 使用pip包管理器安装
poetry add matplotlib # 使用poetry安装
2.2 参考文档
中文文档:https://matplotlib.org.cn/
3、 图表结构
一些绘图基础知识
- 画板
figure
,画纸Sublpot
画质,可多图绘画 - 画纸上最上方是标题
title
,用来给图形起名字 - 坐标轴
Axis
,横轴叫x
坐标轴label
,纵轴叫y
坐标轴ylabel
- 图例
Legend
代表图形里的内容 - 网格
Grid
,图形中的虚线,True显示网格 - 点
Markers
:表示点的形状。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9EuEWiJD-1671340186727)(null)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JQCM2sEa-1671340186817)(null)]
4、 常用图表
基本的视觉元素有三种:点、线、柱状。
- 对于数值类型,用点来进行可视化。例如想要知道学生为某科课程花费的时间和考试成绩两者之间的关系,可以把每个学生的数据绘制一个点,绘制出散点图
scatter plot
,可以查看两者之间的相关性。 - 对于时间序列的数据类型,用线条来进行可视化。用线条将相关的数据点连接在一起,帮助我们观察随着时间的变化数据的变化趋势,这样的图叫做折线图
line plot
。 - 对于分类数据,需要查看数据是如何在各个类别之间分布的,可以使用柱状图
bar plot
。 - 用来表示第三个维度时,可以使用颜色。一般很难在二维平面上表示三维数据,这时可以使用颜色视觉元素。最典型是热图
heatmap
,通过用渐进颜色显示用户热衷的区域或所在地理区域的图。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YApxq19Y-1671340186683)(null)]
二、绘图步骤
1、 常用图表
1.1 散点图
语法:
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)
参数说明:
x,y:长度相同的数组,也就是我们即将绘制散点图的数据点,输入数据。
s:点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小。
c:点的颜色,默认蓝色 ‘b’,也可以是个 RGB 或 RGBA 二维行数组。
marker:点的样式,默认小圆圈 ‘o’。
cmap:Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组的时才使用。如果没有申明就是 image.cmap。
norm:Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。
vmin,vmax::亮度设置,在 norm 参数存在时会忽略。
alpha::透明度设置,0-1 之间,默认 None,即不透明。
linewidths::标记点的长度。
edgecolors::颜色或颜色序列,默认为 ‘face’,可选值有 ‘face’, ‘none’, None。
plotnonfinite::布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。
**kwargs::其他参数。
使用示例:
# -*- coding: utf-8 -*-
"""
Created on Sun Dec 18 10:58:35 2022
@author: Administrator
"""
import matplotlib.pyplot as plt
import numpy as np
import time
np.random.seed(np.int64(time.time())) # 设置随机种子
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
color = np.random.rand(x.size) # 随机颜色
plt.title("Draw Scatter") # 设置标题
plt.scatter(
x,
y,
c=color, # 设置点的颜色
s=x * 100, # 设置每一个点的大小
cmap="viridis", # 设置颜色条
)
plt.colorbar() # 显示颜色条
plt.show() # 显示图片
其余的参数可以自行去尝试.,更多参数可以在官方文档查看,链接:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.scatter.html
1.2 柱状图
语法:
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
参数说明:
x:浮点型数组,柱形图的 x 轴数据。
height:浮点型数组,柱形图的高度。
width:浮点型数组,柱形图的宽度。
bottom:浮点型数组,底座的 y 坐标,默认 0。
align:柱形图与 x 坐标的对齐方式,‘center’ 以 x 位置为中心,这是默认值。 ‘edge’:将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align=‘edge’。
**kwargs::其他参数。
示例:
# -*- coding: utf-8 -*-
"""
Created on Sun Dec 18 10:58:35 2022
@author: Administrator
"""
import matplotlib.pyplot as plt
import numpy as np
import time
np.random.seed(np.int64(time.time())) # 修改随机种子
width = 0.5
N = 10
x = np.arange(N)
y = np.random.rand