Python Matplotlib画图基础介绍

Matplotlib 是 Python 中最常用的一个绘图库,主要用于绘制各种图形,包括散点图、柱状图、3D图、等高线图等等。在做研究过程中肯定会经常用,本文做一个简单的入门介绍,也给出极佳的参考手册,以备查用。内容主要参考了[1]的内容,我自己用jupyter notebook实现了一遍,我会给出所有源码的文件。

重点推荐:https://matplotlib.org/gallery.html
该网页中收录了大量Matplotlib图形实例源码,基本上按需找到适当修改一下就行了,很棒!

除了Matplotlib之外再推荐一个高级统计画图工具:seaborn: statistical data visualization
在这里插入图片描述

Matplotlib第一个简单的图形

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

plt.figure(0)
X = np.random.normal(size=(12, 2))
#plt.scatter(X[:, 0], X[:, 1])
plt.plot(X[:,0],X[:,1],'mo') #m表示紫色,o表示小圆点,更多颜色见文末
plt.show()

在这里插入图片描述

坐标轴控制,标题

# create a new figure
plt.figure(1)
x = np.linspace(0, 2 * np.pi, 50)
y = np.sin(x)
plt.plot(x, y,label="sin(x)")
plt.plot(x, y * 2,label="2sin(x)")
plt.title("sin(x) & 2sin(x)") # 图像上方的标题
plt.xlim((0, np.pi*2)) # 横坐标的数值范围
plt.ylim((-3, 3)) # 纵坐标的数值范围
plt.xticks(np.linspace(0,np.pi*2,5)) # 认为指定在坐标轴上显示什么数字,我用linspace来画出5个值
#plt.xticks((0, np.pi * 0.5, np.pi, np.pi * 1.5, np.pi * 2))
plt.xlabel('XXX')  # 标记横轴坐标名称
plt.ylabel('YYY')  # 标记纵轴坐标名称
plt.legend(loc='upper right') # 标记标签,loc属性表示标签的位置,不写loc的话就是默认best,其他见下文
plt.show()

在这里插入图片描述
legend loc参数选项:
在这里插入图片描述

颜色 表示方式
蓝色 b
绿色 g
红色 r
青色 c
品红 m
黄色 y
黑色 k
白色 w

点的类型 表示方式
点 .
像素 ,
圆 o
方形 s
三角形 ^

线的类型 表示方式
直线 -
虚线 –
点线 :
点划线 -

打上文字标注,公式

有时候我们需要对特定的点进行标注,我们可以使用 plt.annotate 函数来实现。这里我们要标注的点是(x0, y0) = (π, 0)。我们也可以使用 plt.text 函数来添加注释。

plt.plot(x, y)

x0 = np.pi
y0 = 0

# 画出标注点
plt.scatter(x0, y0, s=50)

plt.annotate('sin($\pi$)=%s' % y0, xy=(np.pi, 0), xycoords='data', xytext=(+30, -30),
             textcoords='offset points', fontsize=16,
             arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.2"))

plt.text(0.5, -0.25, "$TEXTsin(\pi)=0$", fontdict={'size': 16, 'color': 'r'})

plt.show()

代码中的$\pi$是公式,参考latex公式去写就行了,很方便

在这里插入图片描述

对于 annotate 函数的参数,做一个简单解释:
‘sin(np.pi)=%s’ % y0 代表标注的内容,可以通过字符串 %s 将 y0 的值传入字符串;
参数xycoords='data’是说基于数据的值来选位置;
xytext=(+30, -30) 和textcoords='offset points’表示对于标注位置的描述 和 xy 偏差值,即标注位置是 xy 位置向右移动 30,向下移动30;
arrowprops 是对图中箭头类型和箭头弧度的设置,需要用 dict 形式传入。

一个图中画多张子图

有时候我们需要将多张子图展示在一起,可以使用 subplot() 实现。即在调用 plot() 函数之前需要先调用 subplot() 函数。该函数的第一个参数代表子图的总行数,第二个参数代表子图的总列数,第三个参数代表活跃区域。

plt.figure(2)
ax1 = plt.subplot(2, 2, 1) # (行,列,活跃区)
plt.plot(x, np.sin(x), 'r+')

ax2 = plt.subplot(2, 2, 2) # 独立的y轴
plt.plot(x, 2 * np.sin(x), 'go')

ax3 = plt.subplot(2, 2, 3)
plt.plot(x, np.cos(x), '-b')

ax4 = plt.subplot(2, 2, 4, sharey=ax3) # 与 ax3 共享y轴
plt.plot(x, 2 * np.cos(x), 'y.')

plt.show()

在这里插入图片描述

上面的 subplot(2, 2, x) 表示将图像窗口分为 2 行 2 列。x 表示当前子图所在的活跃区。

大小不一的多张子图

可以看到,上面的每个子图的大小都是一样的。有时候我们需要不同大小的子图。比如将上面第一张子图完全放置在第一行,其他的子图都放在第二行。

plt.figure(3)
ax1 = plt.subplot(2, 1, 1) # (行,列,活跃区)
plt.plot(x, np.sin(x), '-r+')

ax2 = plt.subplot(2, 3, 4)
plt.plot(x, 2 * np.sin(x), 'g')

ax3 = plt.subplot(2, 3, 5, sharey=ax2)
plt.plot(x, np.cos(x), 'b')

ax4 = plt.subplot(2, 3, 6, sharey=ax2)
plt.plot(x, 2 * np.cos(x), 'y')

plt.show()

在这里插入图片描述

散点图

画一个炫炫的散点图:

k = 500
x = np.random.rand(k) 
y = np.random.rand(k)
size = np.random.rand(k) * 50 # 生成每个点的大小
colour = np.arctan2(y, x) # 生成每个点的颜色大小
plt.scatter(x, y, s=size, c=colour)
plt.colorbar() # 添加颜色栏

plt.show()

在这里插入图片描述

柱状图

常用的柱状图:

k = 10
x = np.arange(k)
y = np.random.rand(k)
plt.bar(x, y) # 画出 x 和 y 的柱状图

# 增加数值
for x, y in zip(x, y):
    plt.text(x, y , '%.2f' % y, ha='center', va='bottom')

plt.show()

在这里插入图片描述

plt.rcParams参数设置

plt(matplotlib.pyplot)使用rc配置文件来自定义图形的各种默认属性,称之为rc配置或rc参数。
通过rc参数可以修改默认的属性,包括窗体大小、每英寸的点数、线条宽度、颜色、样式、坐标轴、坐标和网络属性、文本、字体等。rc参数存储在字典变量中,通过字典的方式进行访问。[2]
在这里插入图片描述

详细颜色字母对照表

在这里插入图片描述

参考资料

[1] https://www.jianshu.com/p/c41ac57cea33
[2] https://blog.csdn.net/weixin_39010770/article/details/88200298
[3] Matplotlib可视化及应用
[4] https://matplotlib.org/gallery.html

发布了83 篇原创文章 · 获赞 639 · 访问量 133万+

猜你喜欢

转载自blog.csdn.net/xbinworld/article/details/104224007