文章目录
写在开头
学习网站:Matplotlib中文
Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。本文整理了一些常用的语法。
1 图形样式
图形样式 | |
---|---|
plt.scatter() | 散点图 |
plt.hist() | 直方图 |
plt.plot() | 折线图,但通过调整步长可以实现曲线 |
plt.bar() | 柱形图 |
plt.barh() | 条形图 |
plt.pie() | 饼图 |
plt.boxplot() | 箱图 |
plt.fill() | 填充多边形 |
2 绘制箭头
plt.arrow(x, y, dx, dy, kwargs)
- x, y: 箭头起点的x和y坐标
- dx, dy: 箭头沿x和y方向的位移
- kwargs: 有助于为箭头添加属性的可选参数,例如为箭头添加颜色,更改箭头的宽度
3 添加形状(圆、矩形……)
plt.gca().add_patch()
# Circle
shape = patches.Circle((0, 0), radius = 1., color = '.75')
plt.gca().add_patch(shape)
# Rectangle
shape = patches.Rectangle((2.5, -.5), 2., 1., color = '.75')
plt.gca().add_patch(shape)
画矩形
plt.gca().add_patch(plt.Rectangle((x[i],y[i]),width,height,angle=angle,facecolor='skyblue'))
参数说明:
- xy:2元组,矩形左下角坐标
- width:矩形的宽度
- height:矩形的高度
- angle:float,可选,矩形相对于x轴逆时针旋转角度,默认0
- fill:bool,可选,是否填充矩形
【问题记录】
绘制的矩形在运行过程中会出现形变成平行四边形的情况,原因在于轴比例的设定问题,通过将横轴和纵轴的比例设定成一比一即可以解决该问题。
4 添加标注
plt.annotate('t',xy=(1,2),xytext=(3,4),arrowprops=dict())
参数说明:
- t为注释文本内容
- xy 为被注释的坐标点
- xytext 为注释文字的坐标位置
plt.annotate(s='New point 2',xy=(1,2),xytext=(-1.5,2.5),color='red',arrowprops=dict(arrowstyle='-|>',connectionstyle='arc3',color='red'))
-
xycoords 参数如下:
- figure points:图左下角的点
- figure pixels:图左下角的像素
- figure fraction:图的左下部分
- axes points:坐标轴左下角的点
- axes pixels:坐标轴左下角的像素
- axes fraction:左下轴的分数
- data:使用被注释对象的坐标系统(默认)
- polar(theta,r):if not native ‘data’ coordinates t
-
weight 设置字体线型
{‘ultralight’, ‘light’, ‘normal’, ‘regular’, ‘book’, ‘medium’, ‘roman’, ‘semibold’, ‘demibold’, ‘demi’, ‘bold’, ‘heavy’, ‘extra bold’, ‘black’} -
color 设置字体颜色
- {‘b’, ‘g’, ‘r’, ‘c’, ‘m’, ‘y’, ‘k’, ‘w’}
- ‘black’,'red’等
- [0,1]之间的浮点型数据
- RGB或者RGBA, 如: (0.1, 0.2, 0.5)、(0.1, 0.2, 0.5, 0.3)等
-
arrowprops:箭头参数,参数类型为字典dict
- width:箭头的宽度(以点为单位)
- headwidth:箭头底部以点为单位的宽度
- headlength:箭头的长度(以点为单位)
- shrink:总长度的一部分,从两端“收缩”
- facecolor:箭头颜色
-
bbox给标题增加外框 ,常用参数如下:
- boxstyle:方框外形
- facecolor:(简写fc)背景颜色
- edgecolor:(简写ec)边框线条颜色
- edgewidth:边框线条大小
5 图形设置
5.1 小工具
- plt.show() //显示图像
- plt.savefig(‘fig.eps’) // 保存图像
- plt.figure(figsize(12,8)) //创建12×8的绘图框
5.2 刻度调整
设定坐标轴范围
方法一:
plt.xlim(xmin,xmax)
plt.ylim(ymin,ymax)
仅能设定坐标轴的刻度范围
方法二:
plt.xticks()
plt.yticks()
既可以设置范围,又可以设置每个刻度之间的间距;还可以设置标签以及标签的旋转角度
延伸
plt.xticks(range(xmin,xmax,step))
修改主刻度及其标签样式
plt.tick_params(axis='x',size=50,labelsize=20)
添加背景网格
plt.grid(which='major')
# 或
plt.grid(True) //添加背景网格
设置轴比例,y轴同理
plt.xscale('log')
5.3 文字调整
- plt.title(‘title’) //添加子图标题内容title
- plt.legend([‘ln’,‘pt’]) //添加图例
- plt.xlabel(‘x’) //添加x轴标签,y轴同理
- plt.text(1,1,‘t’) //在(1,1)位置添加文字t
- plt.subtitle(‘T’) //添加绘图框标题
- from matplotlib.font_manager import FontProperties //使用中文文字需要导入包
6 绘图设置
-
绘制子图
- plt.subplot(1,2,1) //创建1×2的子图矩阵,当前绘制第一幅子图
- plt.tight_layout() //自动调整子图间距
- plt.subplots_adjust() //调整子图的大小
-
fig=plt.figure() //创建绘图框并返回绘图框对象
-
ax=fig.add_subplot(121) //对创建好的绘图框对象添加1×2的子图矩阵并返回第一个子图对象
-
fig, ax=plt.subplots(1,2) //创建1×2的子图矩阵并同时返回绘图框和两个子图对象,其效果等于前两者之和。
-
ax.plot(),ax.bar()……//向子图中添加图形,其余样式同理
-
az.set_title(),ax.set_xlabel(),……//对子图添加标题、标签等
-
plt.gca() //返回当前绘图框中的子图对象
-
plt.gcf() //返回当前绘图框对象
-
ax.invert_xaxis() //反序x轴,y轴同理
-
ax.xaxis.tick_top() //将x轴主刻度标签移动到上方,y轴同理
-
ax.tick_params() //设置坐标轴刻度
-
ax.set_frame_on(False) //关闭子图边框
-
ax.set_axis_off() //关闭子图所有坐标轴
-
开启交互:plt.ion()
-
关闭交互:plt.ioff()
-
from mpl_toolkits.mplot3d import Axes3D fig=plt.figure() ax=Axes3D(fig) //创建3D子图对象
-
调整x,y轴等比例:ax.set_aspect(1.0)
-
figure.canvas.draw()//用于重新绘制整张图表
-
常用颜色:
-
plt.rcParams
matplotlib 是为 python 提供强大绘图功能的第三方库,它的配置文件即 .rc 文件,为 matplotlib 输出图形的几乎所有属性指定了永久的默认值。(图形属性包括包括窗体大小、每英寸的点数、线条宽度、颜色、样式、坐标轴、坐标和网络属性、文本、字体等)在代码执行过程中,有两种方式可以更改运行参数,从而达到修改 matplotlib 输出图形属性的目的。- 使用参数字典 rcParams 访问并修改已经加载的配置项。(注:rc 应该是 run configuration de 缩写)
import matplotlib as mpl mpl.rcParams['lines.color'] = 'blue'
- 通过向 matplotlib.rc() 函数传入属性的关键字来修改配置。
import matplotliib as mpl\mpl.rc('lines', color='blue')
plt.rcParams['font.sans-serif'] = 'SimHei'
使图形中的中文正常编码显示plt.rcParams['axes.unicode_minus'] = False
使坐标轴刻度表签正常显示正负号