matplotlib基本绘图API集锦
程序员文章站
2024-02-14 23:51:52
...
一、基本使用流程
import matplotlib.pyplot as plt # 导入模块
# 画布设置
plt.figure(figsize=(12,9)) # 设置图像尺寸大小,参数值乘以100表示分辨率
plt.subplot(m,n,j) # 多个图排列
plt.figure().tight_layout() # 多个图排列时自动设置间距,消除重叠
# 画图
plt.plot(x, y)
# 图形设置
plt.xlabel( 'height') # 设置X轴标题
plt.ylabel( 'weight ') # 设置Y轴标题
plt.title('scatter demo') # 添加图的标题
# 保存与显示
plt.savefig(savepath) # 保存图像,图像如果不完整,需要添加参数 bbox_inches = 'tight'
plt.show() # 显示图像,执行该语句之后会释放 figure 资源,如果要保存图片必须将 save 放在 show 之前,否则只能保存空白
二、常见设置
1.设置画布尺寸
plt.figure(
figsize=(30, 5), # 画布大小,指定画布的宽和高,单位为英寸
dpi=80 # 指定绘图对象的分辨率,即每英寸对少个像素,默认为80
)
2.设置坐标轴刻度、标签、标题
plt.xticks(
x, # 刻度,指定在哪些位置有标签
x_ticks_label, # 刻度标签,shape 与刻度一致
rotation # 刻度标签旋转角度
)
plt.xlabel('x_axle')
3.设置坐标轴显示范围
plt.xlim([4, 8]) # 两边都设置
plt.xlim(xmin=4) # 只设置左边
plt.xlim(xmax=4) # 只设置右边
4.设置坐标轴显示方式
ax = plt.gca()
ax.spines['right'].set_color('none') # 隐藏右边线
ax.spines['top'].set_color('none') # 隐藏上边线
ax.spines['left'].set_color('b') # 左边线颜色为蓝色
ax.spines['bottom'].set_color('y') # 下边线颜色为黄色
ax.spines['left'].set_position(('data', 6)) # 移动左边线,'data' 表示移动到交叉轴的指定坐标
5.设置网格
plt.grid(
b=None, # 是否显示网格线
axis='both', # 方向轴
linestyle='-.', # 网格线样式
linewidth=2, # 线宽
alpha=.4, # 透明度
color='red' # 颜色
)
6.设置图例
图例在一图多线中使用,并且要在划线 plt.plot 中设置 label 参数。
plt.plot(x, y, c='r', label='line1')
plt.plot(x, y**2, c='b', label='line2')
plt.legend(
prop, # 图例字体
loc='upper right' # 图例位置
)
7.设置显示中文(局部)
一般用来设置中文的属性都是 fontproperties
,除了图例用的是 prop
,这个在上面说到过!
from matplotlib import font_manager
# 设置字体,这个字体文件必须支持中文
my_font = font_manager.FontProperties(fname='/path/to/font_file.ttc', size=18)
# 坐标轴显示中文
plt.xlabel(
x_title, # 坐标轴标题内容
fontproperties=my_font # 字体设置
)
# 图形标题显示中文
plt.title(
title,
fontproperties=my_font
)
8.设置中文显示(全局)
plt.rcParams['font.sans-serif'] = ['FangSong']
'''
常用字体:
- 黑体 SimHei
- 微软雅黑 Microsoft YaHei
- 微软正黑体 Microsoft JhengHei
- 新宋体 NSimSun
- 新细明体 PMingLiU
- 细明体 MingLiU
- 标楷体 DFKai-SB
- 仿宋 FangSong
- 楷体 KaiTi
- 仿宋_GB2312 FangSong_GB2312
- 楷体_GB2312 KaiTi_GB2312
'''
9.创建多个子图
fig = plt.figure(num=1, figsize=(10,10))
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,3)
ax4 = fig.add_subplot(2,2,4)
10.任意位置添加文字
plt.text(
x, # 横坐标
y, # 纵坐标
text, # 内容
c, # 颜色
size, # 字体大小
ha='center', # 对齐方式
fontproperties=my_font # 字体
)
三、基本图形绘制
1.折线图
plt.plot(
x, # 横坐标
y, # 纵坐标
color='r', # 折线颜色
alpha=0.5, # 折线透明度
linestyle='--', # 折线的样式,-./
linewidth=3, # 折线宽度
marker='o' # 折点样式,*/+/x/s/v/h/H
)
2.散点图
plt.scatter(
x,
y,
c='r',
marker='s',
alpha=.5,
label='test'
)
3.条形图
条形图绘制时会返回所有绘制的矩形框,这些矩形框也是一个个的对象!
# 垂直条形图
rects = ax1.bar(x, y, color='r', width=0.3, alpha=.5)
for rect in rects:
print(rect.get_x(), rect.get_y())
print(rect.get_width(), rect.get_height())
# 水平条形图
ax2.barh(x, y, color='r', height=0.3, alpha=.5) # 这里条形宽度其实是高度 height
# 并列条形图
ax3.bar(x, y, color='r', width=0.3, alpha=.5)
ax3.bar(x+0.3, y-1, color='b', width=0.3, alpha=.5) # 这里 x 偏移与宽度一致
# 罗列条形图
ax4.bar(x, y, width=0.3, alpha=.5) # 先画下面的
ax4.bar(x, y-1, bottom=y, color='r', width=0.3, alpha=.5) # 再画上面的,用 bottom 把它顶起来
4.直方图
直方图带有统计功能,它会统计落在每一个区间内的样本数量,然后绘制矩形,所以输入需要是一个样本集合
plt.hist(
x, # 数据样本集合
bins # 区间的数量,它会根据这个参数、以及数据的最大最小值自动计算每一个区间的上下界
)
# 区间数量的计算方式:最大样本值减去最小样本值,除以区间宽度,最后取整
bins = int((max(x)-min(x))/region_width)
5.饼状图
size = [59, 20, 21] # 每一部分占比
clolor = ['r', 'g', 'b'] # 每一部分颜色
explode = [0, 0.1, 0] # 每一部分凸出比例
label_list = ['梅西', 'C罗', '内马尔'] # 每一部分标签
# 绘制饼状图
patches, l_text, p_text = plt.pie(
size,
explode=explode, # 凸出
colors=clolor, # 颜色
labels=label_list, # 标签
labeldistance=1.4, # 各部分标签距离圆心距离,按照半径的倍数计算
pctdistance=0.7, # 圆内各扇形文本距离圆心距离,按照半径的倍数计算
autopct='%.1f%%', # 圆内各扇形文本显示格式,就是半分比
shadow=True, # 圆内各扇形边界阴影
startangle=90, # 第一个扇形的起始角度,从第一象限逆时针开始计算
)
# 重新绘制扇形颜色
for t in patches:
t.set_color('pink')
break
# 绘制标签
for t in l_text:
t.set_fontproperties(my_font)
# 绘制扇形内文本(百分比标签)
for t in p_text:
t.set_size(15)
# 绘制图例
plt.legend(prop=my_font)
下一篇: 21.合并两个有序表