Python Matplotlib

在这里插入图片描述
Matplotlib 是支持 Python 语言的开源绘图库,支持丰富的绘图类型、简单的绘图方式以及完善的接口文档.

在使用 Notebook 环境绘图时,需要先运行 Jupyter Notebook 的魔术命令 %matplotlib inline。这条命令的作用是将 Matplotlib 绘制的图形嵌入在当前页面中。而在桌面环境中绘图时,不需要添加此命令,而是在全部绘图代码之后追加 plt.show()。

简单示例:

from matplotlib import pyplot as plt
plt.plot([1, 2, 3, 2, 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1])

在这里插入图片描述

plt.plot() 是 pyplot 模块下面的直线绘制(折线图)方法类。示例中包含了一个 [1, 2, 3, 2, 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1] 列表,Matplotlib 会默认将该列表作为 𝑦 值,而 𝑥 值会从 0 开始依次递增。

自定义横坐标刻度:

plt.plot([2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
         [1, 2, 3, 2, 1, 2, 3, 4, 5, 6, 5, 4, 3, 2, 1])

在这里插入图片描述
更多类型图
在这里插入图片描述

更多详细内容参考官方地址

一 常用图形示例

1. 折线图示例

matplotlib.pyplot.plot(*args, **kwargs)
方法严格来讲可以绘制线形图或者样本标记。其中,*args允许输入单个 𝑦 值或 𝑥,𝑦 值。kwargs 的部分就是用于设置样式参数了。

import numpy as np  # 载入数值计算模块
from matplotlib import pyplot as plt
# 在 -2PI 和 2PI 之间等间距生成 1000 个值,也就是 X 坐标
X = np.linspace(-2*np.pi, 2*np.pi, 1000)
# 计算 y 坐标
y = np.sin(X)

# 向方法中 `*args` 输入 X,y 坐标
plt.plot(X, y)

在这里插入图片描述

2.柱状图示例

matplotlib.pyplot.bar(*args, **kwargs)

plt.bar([1, 2, 3], [1, 2, 3])

在这里插入图片描述

3.散点图示例

matplotlib.pyplot.scatter(*args, **kwargs)

# X,y 的坐标均有 numpy 在 0 到 1 中随机生成 1000 个值
X = np.random.ranf(1000)
y = np.random.ranf(1000)
# 向方法中 `*args` 输入 X,y 坐标
plt.scatter(X, y)

在这里插入图片描述

4.饼状图示例

matplotlib.pyplot.pie(*args, **kwargs)

plt.pie([1, 2, 3, 4, 5])

在这里插入图片描述

二 定义图形样式

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

折线图样式常用参数:

linestyle :线条样式

Linestyle效果
‘-’ or ‘solid’实线
‘–’ or ‘dashed’虚线
‘-.’ or ‘dashdot’标准虚线
‘:’ or ‘dotted’点虚线
‘None’ or ’ ’ or ‘’什么也没有

linewidth: 线宽
alpha: 透明度(0-1)
color:颜色 (常用颜色简写:red-r, green-g, black-k, blue-b, yellow-y)

示例:

X = np.linspace(-2 * np.pi, 2 * np.pi, 1000)
# 计算 sin() 对应的纵坐标
y1 = np.sin(X)
# 计算 cos() 对应的纵坐标
y2 = np.cos(X)

# 向方法中 `*args` 输入 X,y 坐标
plt.plot(X, y1, color='r', linestyle='--', linewidth=2, alpha=0.8)
plt.plot(X, y2, color='b', linestyle='-', linewidth=2)

在这里插入图片描述

散点图样式常用参数:

s= 散点大小
c= 散点颜色
marker= 散点样式
cmap= 定义多类别散点的颜色
alpha= 点的透明度
edgecolors= 散点边缘颜色

# 生成随机数据
x = np.random.rand(100)
y = np.random.rand(100)
colors = np.random.rand(100)
size = np.random.normal(50, 60, 10)

plt.scatter(x, y, s=size, c=colors)  # 绘制散点图

![在这里插入图片描述](https://img-blog.csdnimg.cn/20210312112115792.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NtYWxsd29ybGR4eWw=,size_16,color_FFF

饼图样式常用参数:

x:array,表示用于绘制饼图的数据,没有默认。
explode:array,默认为None。如果不是None,是一个长度与x相同长度的数组,用来指定每部分的偏移量或者说指定项距离饼图圆心为n个半径。
labels:array,默认为:None。指定每一个饼块的名称。
colors:特定的string或含颜色字符的array,默认为:None。
autopct:特定的string,默认是None。 指定数值的显示方式。
pctdistance:float,默认值:0.6。 指定每一项的比例autopct和距离圆心的半径。
labeldistance:float,默认值:1.1。 指定每一项的名称label和距离圆心的半径。
startangle:float,默认:None。 如果不是None,从x轴逆时针旋转饼图的开始角度。
radius:float,默认为:1。饼图的半径。

label = 'Cat', 'Dog', 'Cattle', 'Sheep', 'Horse'  # 各类别标签
color = 'r', 'g', 'r', 'g', 'y'  # 各类别颜色
size = [1, 2, 3, 4, 5]  # 各类别占比
explode = (0, 0, 0, 0, 0.2)  # 各类别的偏移半径
# 绘制饼状图
plt.pie(size, colors=color, explode=explode,
        labels=label, shadow=True, autopct='%1.1f%%')
# 饼状图呈正圆
plt.axis('equal')

在这里插入图片描述

组合图样式:

只需要将所需图形的代码放置在一起就可以,但是两张图的横坐标必须共享,才能够被 Matplotlib 自动判断为组合图效果。
示例:

x = [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
y_bar = [3, 4, 6, 8, 9, 10, 9, 11, 7, 8]
y_line = [2, 3, 5, 7, 8, 9, 8, 10, 6, 7]

plt.bar(x, y_bar)
plt.plot(x, y_line, '-o', color='y')

在这里插入图片描述

三 图形位置

figure 相当于绘画用的画板,而 axes 则相当于铺在画板上的画布。
add_axes() 方法向我们设置的画板 figure 中添加画布 axes

x = np.linspace(0, 10, 20)  # 生成数据
y = x * x + 2

fig = plt.figure()  # 新建图形对象
axes = fig.add_axes([0.5, 0.5, 0.8, 0.8])  # 控制画布的左, 下, 宽度, 高度
axes.plot(x, y, 'r')

在这里插入图片描述

还可以实现大图套小图

fig = plt.figure()  # 新建画板
axes1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])  # 大画布
axes2 = fig.add_axes([0.2, 0.5, 0.4, 0.3])  # 小画布

axes1.plot(x, y, 'r')  # 大画布
axes2.plot(y, x, 'g')  # 小画布

在这里插入图片描述

还有一种添加画布的方式,那就是 plt.subplots()

fig, axes = plt.subplots()
axes.plot(x, y, 'r')

在这里插入图片描述

借助于 plt.subplots(),我们就可以实现子图的绘制,也就是将多张图按一定顺序拼接在一起。

fig, axes = plt.subplots(nrows=1, ncols=2)  # 子图为 1 行,2 列
for ax in axes:
    ax.plot(x, y, 'r')

在这里插入图片描述
通过设置 plt.subplots 的参数,可以实现调节画布尺寸和显示精度。

fig, axes = plt.subplots(
    figsize=(16, 9), dpi=50)  # 通过 figsize 调节尺寸, dpi 调节显示精度
axes.plot(x, y, 'r')

在这里插入图片描述

四 规范画图

1.添加图标题、图例

loc 参数标记图例位置,1,2,3,4 依次代表:右上角、左上角、左下角,右下角;0 代表自适应

fig, axes = plt.subplots()

axes.set_xlabel('x label')  # 横轴名称
axes.set_ylabel('y label')
axes.set_title('title')  # 图形名称

axes.plot(x, x**2)
axes.plot(x, x**3)
axes.legend(["y = x**2", "y = x**3"], loc=0)  # 图例

在这里插入图片描述

2.线型、颜色、透明度

fig, axes = plt.subplots()

axes.plot(x, x+1, color="red", alpha=0.5)
axes.plot(x, x+2, color="#1155dd")
axes.plot(x, x+3, color="#15cc55")

在这里插入图片描述

3. 画布网格、坐标轴范围

设置画布网格和坐标轴范围。这里通过指定 axes[0] 序号,来实现子图的自定义顺序排列。

matplotlib.pyplot.subplots(nrows=1, ncols=1, sharex=False,sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)

参考原文:https://blog.csdn.net/henni_719/article/details/77479912
输入参数说明:
nrows,ncols:整型,可选参数,默认为1。表示子图网格(grid)的行数与列数。
sharex,sharey:布尔值或者{‘none’,‘all’,‘row’,‘col’},默认:False
控制x(sharex)或y(sharey)轴之间的属性共享:
1.True或者’all’:x或y轴属性将在所有子图(subplots)中共享.
2.False或’none’:每个子图的x或y轴都是独立的部分
3.‘row’:每个子图在一个x或y轴共享行(row)
4.‘col’:每个子图在一个x或y轴共享列(column)
当子图在x轴有一个共享列时(‘col’),只有底部子图的x tick标记是可视的。
同理,当子图在y轴有一个共享行时(‘row’),只有第一列子图的y tick标记是可视的。
squeeze:布尔类型,可选参数,默认:True。
* 如果是True,额外的维度从返回的Axes(轴)对象中挤出。
》如果只有一个子图被构建(nrows=ncols=1),结果是单个Axes对象作为标量被返回。
》对于N1或1N个子图,返回一个1维数组。
》对于N*M,N>1和M>1返回一个2维数组。
*如果是False,不进行挤压操作:返回一个元素为Axes实例的2维数组,即使它最终是1x1。
subplot_kw:字典类型,可选参数。把字典的关键字传递给add_subplot()来创建每个子图。
gridspec_kw字典类型,可选参数。把字典的关键字传递给GridSpec构造函数创建子图放在网格里(grid)。
**fig_kw:把所有详细的关键字参数传给figure()函数

返回结果:
fig:matplotlib.figure.Figure对象
ax:Axes(轴)对象或Axes(轴)对象数组。

fig, axes = plt.subplots(1, 2, figsize=(10, 5))

# 显示网格
axes[0].plot(x, x**2, x, x**3, lw=2)
axes[0].grid(True)

# 设置坐标轴范围
axes[1].plot(x, x**2, x, x**3)
axes[1].set_ylim([0, 60])
axes[1].set_xlim([2, 5])

在这里插入图片描述

4.图形标注

文字标注的方法由 matplotlib.pyplot.text() 实现。最基本的样式为 matplotlib.pyplot.text(x, y, s),其中 x, y 用于标注位置定位,s 代表标注的字符串。除此之外,你还可以通过 fontsize= , horizontalalignment= 等参数调整标注字体的大小,对齐样式等。

fig, axes = plt.subplots()

x_bar = [10, 20, 30, 40, 50]  # 柱形图横坐标
y_bar = [0.5, 0.6, 0.3, 0.4, 0.8]  # 柱形图纵坐标
bars = axes.bar(x_bar, y_bar, color='blue', label=x_bar, width=2)  # 绘制柱形图
for i, rect in enumerate(bars):
    x_text = rect.get_x()  # 获取柱形图横坐标
    y_text = rect.get_height() + 0.01  # 获取柱子的高度并增加 0.01
    plt.text(x_text, y_text, '%.1f' % y_bar[i])  # 标注文字

在这里插入图片描述
通过 matplotlib.pyplot.annotate() 方法向图像中添加箭头等样式标注。

fig, axes = plt.subplots()

bars = axes.bar(x_bar, y_bar, color='blue', label=x_bar, width=2)  # 绘制柱形图
for i, rect in enumerate(bars):
    x_text = rect.get_x()  # 获取柱形图横坐标
    y_text = rect.get_height() + 0.01  # 获取柱子的高度并增加 0.01
    plt.text(x_text, y_text, '%.1f' % y_bar[i])  # 标注文字

    # 增加箭头标注
    #xy=() 表示标注终点坐标,xytext=() 表示标注起点坐标。
    #在箭头绘制的过程中,arrowprops=() 用于设置箭头样式,facecolor= 设置颜色,width= 设置箭尾宽度,headwidth= 设置箭头宽度,可以通过 arrowstyle= 改变箭头的样式。
    plt.annotate('Min', xy=(32, 0.3), xytext=(36, 0.3),
                 arrowprops=dict(facecolor='black', width=1, headwidth=7))

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值