目录
Matplotlib 是 Python 的一个绘图库。它包含了大量的工具,你可以使用这些工具创建各种图形,包括简单的散点图,正弦曲线,甚至是三维图形。
全局定义:
import numpy as np
import matplotlib.pyplot as plt
1、画简单曲线
1.1、画一个正弦曲线
import numpy as np
import matplotlib.pyplot as plt
def line_test():
# 它包含了50个元素的数组,这50个元素均匀的分布在[0, 2*pi]的区间上。然后通过np.sin(x)生成y
x = np.linspace(0, 2 * np.pi, 50)
y = np.sin(x)
# 通过plt.plot(x, y)来画出图形,并通过plt.show()来显示。
plt.plot(x, y)
plt.show()
结果:
1.2、调整更多的样式
将plot函数改为:plt.plot(x, y, 'm--')
结果为:
列举常用样式,三个组合使用,决定线的样式:
1、常见颜色表示:
颜色 |
蓝色 |
绿色 |
红色 |
青色 |
品红 |
黄色 |
黑色 |
白色 |
表示方式 |
b |
g |
r |
c |
m |
y |
k |
w |
2、常见点类型:
点类型 |
点 |
像素 |
圆 |
方形 |
三角形 |
表示方式 |
. |
, |
。 |
s |
^ |
3、常见线类型:
线类型 |
直线 |
虚线 |
点线 |
点划线 |
- |
-- |
: |
: |
-. |
1.3、添加图例
plt.plot(x, y, 'm--', label="y=sin(x)") # 添加图例
plt.legend(loc='best') # 自动适配最佳位置
结果:
2、添加图注
2.1、设置画布大小
plt.figure(figsize=(6, 4), dpi=100) # 画布调整为 600*400, w*h
结果:
其中dpi为每英寸的像素点数,默认为100。figsize=(w, h),最终的画布大小为(w*dpi, h*dpi)。
https://blog.csdn.net/weixin_39956558/article/details/110908699#commentBox
2.2、添加标题和坐标轴描述
plt.title("y=sin(x)") # 设置标题
plt.xlabel('X') # xlabel 和 ylabel 来设置轴的名称
plt.ylabel('Y')
2.3、设置刻度范围
# 设置坐标轴的刻度,范围
plt.xlim((0, 2 * np.pi))
plt.ylim((-2, 2))
# 可以通过 xticks 和 yticks 来设置轴的刻度
plt.xticks((0, np.pi * 0.5, np.pi, np.pi * 1.5, np.pi * 2))
结果:
3、画多个曲线
plt.plot(x, y, 'm--', label="y=sin(x)")
plt.plot(x, np.cos(x), 'g', label="y=cos(x)")
plt.legend(loc='best')
结果:
4、保存为图像
plt.savefig("vis.jpg")
plt.savefig("test.png", dpi=120) # 指定分辨率
5、处理中文乱码问题
x = ['南京', '上海', '成都', '香港']
y = [60600, 53000, 50400, 52000]
plt.plot(x, y)
plt.title("中文乱码")
plt.show()
其实只需要配置下后台字体即可。
x = ['南京', '上海', '成都', '香港']
y = [60600, 53000, 50400, 52000]
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.plot(x, y)
plt.title("中文正常")
plt.show()
6、添加注释
def test1():
x = np.linspace(0, 2 * np.pi, 50)
y = np.sin(x)
plt.plot(x, y, label="sin(x)")
plt.legend(loc='best')
#####添加注释######
# 需要对特定的点进行标注,我们可以使用 plt.annotate 函数来实现。
# 这里我们要标注的点是 (x0, y0) = (π, 0)。
# 我们也可以使用 plt.text 函数来添加注释。
x0 = np.pi
y0 = 0
# 画出标注点
plt.scatter(x0, y0, s=50)
plt.annotate('sin(np.pi)=%s' % y0, xy=(np.pi, 0), xycoords='data', xytext=(+30, -30),
textcoords='offset points', fontsize=16,
arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.2"))
# 对于 annotate 函数的参数,做一个简单解释:
# 'sin(np.pi)=%s' % y0 代表标注的内容,可以通过字符串 %s 将 y0 的值传入字符串;
# 参数 xycoords='data' 是说基于数据的值来选位置;
# xytext=(+30, -30) 和 textcoords='offset points' 表示对于标注位置的描述 和 xy 偏差值,即标注位置是 xy 位置向右移动 30,向下移动30;
# arrowprops 是对图中箭头类型和箭头弧度的设置,需要用 dict 形式传入。
plt.text(0.5, -0.25, "sin(np.pi) = 0", fontdict={'size': 18, 'color': 'r'})
plt.show()
结果:
7、figure
在matplotlib中,整个图表为一个figure对象。其实对于每一个弹出的小窗口就是一个Figure对象。下面演示如何在一个代码中创建多个Figure对象,也就是多个小窗口。
def test2():
x = np.linspace(-1, 1, 50)
y1 = x ** 2
y2 = x * 2
# 这个是第一个figure对象,下面的内容都会在第一个figure中显示
plt.figure()
plt.plot(x, y1)
# 这里第二个figure对象
plt.figure()
plt.plot(x, y2)
plt.show()
figure参数:
plt.figure(num = 3,figsize = (10,5)) # 指定新创建的为figure3
plt.figure("test") # 指定新创建的为test
参考文章:
1、Python--Matlibplot画图功能演示
https://blog.csdn.net/qq_25948717/article/details/82724686
2、Python-matplotlib画图
https://zhuanlan.zhihu.com/p/33270402