Matplotlib plot绘制多条线,点型(标记)、线型,参数配置及缩写形式
Matplotlib plot绘制多条线,点型(标记)、线型,参数配置及缩写形式
Matplotlib是Python中最常用的绘图库之一,其plot函数功能强大,可以绘制各种类型的线性图。本文将详细介绍如何使用plot函数绘制多条线、设置线型和线宽、配置点型(标记),以及参数配置的缩写形式。通过具体的代码示例,帮助读者掌握这些实用的绘图技巧。
plot绘制多条线
在绘制直线或曲线的时候,常用的方法就是通过足够数量的点进行连接来模拟曲线
一次plot绘制一条线
样例如下
import matplotlib.pyplot as plt
import numpy as np
figure1 = plt.figure(figsize=(6, 4))
x = np.linspace(0, 20, 100)
y = 2 * x
plt.subplot(121)
line1 = plt.plot(x, y)
plt.subplot(122)
y1 = np.sin(x)
line2 = plt.plot(x, y1)
plt.subplots_adjust(wspace=0.4)
figure1.savefig('plot1.png')
print(line1, type(line1))
plt.show()
# [<matplotlib.lines.Line2D object at 0x13fa44650>] <class 'list'>
可以看到使用plt绘图后,会返回一个Line2D对象组成的列表
上述代码中一次plot的调用只绘制了一条线,分别为一次函数和正弦函数
一次plot绘制多条线
绘制多条线,也就是多个2D图像,只需要在plot参数上配置上每条线的坐标值就好,现在我们把上面的两个函数曲线通过一个plot绘制在一起
import matplotlib.pyplot as plt
import numpy as np
figure1 = plt.figure(figsize=(6, 4))
x = np.linspace(0, 20, 100)
y = 2 * x
y1 = np.sin(x)
plt.subplot(121)
line1, line2 = plt.plot(x, y, x, np.sin(x))
figure1.savefig('plot1.png')
print(line1, line2, sep='\n')
plt.show()
# Line2D(_child0)
# Line2D(_child1)
可以看到一次绘制多个plot对象后,我们对返回的Line2D列表进行解包就可以得到两个Line2D对象
线型及线宽选择
在绘制线性图的时候,也就是使用plt.plot()进行图像绘制的时候,默认线型为实线,可以在plot绘图时进行绘制,线型和线宽都可以手动设置
线型的选择可以使用linestyle参数进行设置,也可以使用缩写版的ls
线宽的设置可以使用linewidth进行设置,也可以使用缩写版的lw
线型的选择
- '-' 或 'solid':实线
- '--' 或 'dashed':虚线
- '-.' 或 'dashdot':点划线
- ':' 或 'dotted':点线
- 'None' 或 '''':无线条
下面展示四种线及不同线宽的样式
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 10)
y = np.sin(x)
fig = plt.figure()
# 绘制不同线型
plt.plot(x, y, linestyle='-', lw=1, label='Solid Line') # 实线
plt.plot(x, y + 0.5, linestyle='--', lw=3, label='Dashed Line') # 虚线
plt.plot(x, y + 1, linestyle='-.', lw=5, label='Dash-dot Line') # 点划线
plt.plot(x, y + 1.5, linestyle=':', lw=7, label='Dotted Line') # 点线
plt.legend()
fig.savefig('plo1.png')
plt.show()
线型及线宽的获取
我们可以通过解包plot绘制的Line2D列表获取每个Line2D对象,然后通过.get_linestyle()和.get_linewidth()获取线型和线宽
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 10)
y = np.sin(x)
fig = plt.figure()
# 绘制不同线型

line1, = plt.plot(x, y, linestyle='-', lw=1, label='Solid Line') # 实线
line2, = plt.plot(x, y + 0.5, linestyle='--', lw=3, label='Dashed Line') # 虚线
line3, = plt.plot(x, y + 1, linestyle='-.', lw=5, label='Dash-dot Line') # 点划线
line4, = plt.plot(x, y + 1.5, linestyle=':', lw=7, label='Dotted Line') # 点线
plt.legend()
print(line1.get_linestyle(), line1.get_linewidth())
print(line2.get_linestyle(), line2.get_linewidth())
print(line3.get_linestyle(), line3.get_linewidth())
print(line4.get_linestyle(), line4.get_linewidth())
# - 1.0
# -- 3.0
# -. 5.0
# : 7.0
点型(标记设置)
点,也叫标记,配置每个点在图表中的绘制,可以设置标记的颜色(默认与线的颜色相同),样式默认为(None,也就是默认不绘制标记),边缘颜色(默认与线的颜色相同),边缘线宽,标记大小
标记样式在plot中的参数名为marker,样式的选择如下
- '.':表示点标记,通常是一个非常小的点。
- 'o':表示圆圈标记,即一个空心的圆圈。
- 'v':表示下三角标记,即一个朝下的三角形。
- '^':表示上三角标记,即一个朝上的三角形。
- '<':表示左三角标记,即一个朝左的三角形。
- '>':表示右三角标记,即一个朝右的三角形。
- 's':表示正方形标记,即一个小方块。
- 'p':表示五边形标记,类似于一个五角形。
- '':表示*星形标记,即一个星星形状的标记。
- 'h':表示六边形标记1,一个带有六个顶点的形状。
- 'H':表示六边形标记2,另一个略微不同的六边形形状。
- '+':表示加号标记,即一个加号符号。
- 'x':表示叉号标记,即一个叉形符号。
- 'D':表示大菱形标记,一个大的钻石形状。
- 'd':表示小菱形标记,一个小的钻石形状。
- '|':表示垂直线标记,即一条垂直线。
- '_':表示水平线标记,即一条水平线。
18.‘’或None或'None', 即不绘制标记
边缘颜色的参数为markeredgecolor
边缘线宽的参数为markeredgewidth
标记颜色的参数为markerfacecolor
标记大小的参数为markersize
绘制样例如下
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 10)
y = np.sin(x)
fig = plt.figure()
plt.plot(x, y, ls='-', color='r', marker='o', markerfacecolor='b', markeredgecolor='y', markeredgewidth=4, markersize=15)
fig.savefig('plo1.png')
plt.show()
参数配置的缩写形式
参数配置的缩写形式由三个字符组成,分别为线的颜色的缩写字母形式,标记的样式,和线型,顺序不可变
如‘ro-’ 这里指线色为红,标记为圆圈,线型为实线
注意,如使用一个plot绘制多条线,缩写参数会根据就近原则配置最近的线,如有多条线需要进行配置,则需要多次配置参数
样例如下
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 10)
y = np.sin(x)
fig = plt.figure()
plt.plot(x, y, x, 2 * x, 'ro-')
fig.savefig('plo1.png')
plt.show()
可以注意到由于缩写参数的就近原则,第一条曲线并未获取到参数,所以需要再次配置

import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 10)
y = np.sin(x)
fig = plt.figure()
plt.plot(x, y, 'b+--', x, 2 * x, 'ro-')
fig.savefig('plo1.png')
plt.show()