目录
一、操作
(一)创建图形对象
(二)多子图操作
1.add_axes(rect):添加区域
关键:关于plot()
2.subplot():划分画布
3.subplots
4.设置多图基本信息的几个方法
(1)创建时直接设置
(2) 使用 pyplot 模块中方法设置之后绘图
(3)对返回的区域对象设置
(三)显示图片
(四)显示中文及负号
二、相关元素设置
(一)图表名称
(二)x、y 轴名称
(三)x、y 轴刻度
(四)图例
(五)每条 x、y 的具体数值
补充:
三、可视性设置
(一)网格线
(二)对坐标轴操作
(三)rcParams
(四)关于图表参数
样式缩写
Matplotlib 是 python 中一款强大的可视化绘图工具,可以以更直观的方式对数据进行展示和呈现,可以准确高效传递信息,甚至可以帮助我们发现某种规律和特征,挖掘数据背后的价值,本文简单介绍了Matplotlib常用操作和方法
Matplotlib 中,面向对象编程的核心思想是创建图形对象并对其进行操作,或调用方法与属性,这样我们在处理多个画布和图形将更加有效
使用 plt.figure() 生成图形对象,并设置当前画布特征,返回值是一个 figure 对象
f=plt.figure()
内部参数:
上面生成的一个 figure 对象可以包含多个 axes 子绘图区域,一个 axes 是一个绘图区域,不加设置时 Axes 默认为1,整个画布都是绘图区域,理解为一个画框铺上一张纸作画
在多子图出现重叠情况时尝试使用 plt.tight_layout() 方法设置紧凑型布局
创建子绘图区域三种方法:
matplotlib 库中定义了一个 axes 类(轴域),指定了一个有数值范围的绘图区域,给定一个画布中可以包含多个 axes 对象,同一个 axes 只能在一个画布中使用
f=plt.figure()
ax2=f.add_axes([0,0,1,1])
ax1=f.add_axes([0.2,0.2,0.5,0.5])
# 添加时会有顺序,先添加的会被覆盖在底下
ax1.plot([1,2,3],[4,5,6])
ax2.plot([6,5,4],[3,2,1])
plt.show()
figure() 会默认创建一个作图区域,可使用 ax.plot() 对想要操作的 axes 对象进行绘图,plt.plot() 方法默认对当前 axes 进行绘制(新创一个 axes,就会切换到最新的 axes),如下面默认当前所在的区域是 ax1,因为 ax1 是最新创建的
plot(y):仅有一个值时省略了x,则x默认[0,N-1]均匀递增,N为y轴元素个数
f=plt.figure()
ax2=f.add_axes([.1,.1,.8,.8])
ax1=f.add_axes([0.2,0.2,0.5,0.5])
plt.plot([1,2,3],[4,5,6])
plt.plot([6,5,4],[3,2,1])
plt.show()
返回的值是当前区域对象
ax1=plt.subplot(211)
参数:
也可使用 fig.add_subplot() 方法在画布上进行绘制,3.6版本后新建子图若与现有子图重叠时,重叠部分子图会被自动删除
使用方法和 subplot() 是类似
fig,ax=plt.subplots(4)
如何取?
由索引为0开始的行和列进行定位
fig,ax=plt.subplots(2,2)
plt.tight_layout()
# 选一个区域绘制
ax1=ax[0][1]
x=np.arange(5)
ax1.plot(x,x*2)
ax1.set_title('sqrt')
# 换一个区域绘制
ax2=ax[1][0]
ax2.plot(x,np.exp(x))
ax2.set_title('ex')
plt.show()
区别:
主要是直接创建、pyplot方式以及面向对象三种方式
如
plt.subplot(211,title='',xlable='x_axis')
如
-----区域1-----
plt.subplot(211)
plt.title('ax1')
plt.plot(..)
-----区域2-----
plt.subplot(212)
plt.title('ax2')
plt.plot(..)
对于区域对象很多方法都是 set_ 开头
ax1=plt.subplot(211)
ax2=plt.subplot(212)
-----区域1-----
ax1.set_title('ax1')
ax1.plot(..)
-----区域2-----
ax2.set_title('ax2')
ax2.plot(..)
plt.show(),在 jupyter 里不需要,会自动显示图像
x=np.arange(-50,50)
y=x**2
plt.title('标题')
plt.plot(x,y)
plt.show()
所有设置应在绘图前进行设置,matplotlib 会定位对当前图片或当前画布进行操作
使用 title() 方法
plt.title('标题名称',fongsize=12)
使用xlable、ylable
plt.xlabel('x轴',fongsize=12)
plt.ylabel('y轴')
字体参数
使用 xticks()、yticks(),可以将 x、y 轴设置为想要的样子
参数
x_ticks=range(-50,51,10)
y_ticks=range(0,2500,100)
plt.xticks(x_ticks)
plt.yticks(y_ticks)
legend(),用于放在图中一角对于符号颜色代表内容的指示和说明,若图形本身有 lable 将默认使用lable的值作为图例说明
plt.plot(x,y,lable='a')
plt.legend() # 显示图例
设置 plt.legend(loc='xxx') 参数可以对位置进行设置,图例本身默认寻找最佳位置放置(即不阻挡视图的地方)
使用 plt.text() 显示对应点上的数据值,由于x和y是对应坐标,一次只能指定一个,所以没法一步到位,应用循环语句一个个标注
参数:
说明 zip() 方法:生成一个迭代器对象
x_l=[1,2,3]
y_l=[4,5,6]
a=zip(x_l,y_l)
print(a,type(a),id(a))
for x,y in a:
print(x,y)
1987486763136
1 4
2 5
3 6
标注 x、y 的代码如下
# 根据x标签算出每个y对应的值
y_l=[]
for i in range(len(x_ticks)):
y_l.append(x_ticks[i]**2)
# 生成迭代器
z=zip(x_ticks,y_l)
# 遍历
for a,b in z:
plt.text(a,b,b)
# 画图
plt.show()
上面的图片并没有将中文显示出来,因为 matplotlib 默认不支持中文,应修改字体配置,matplotlib 默认配置信息可以通过运行配置参数 rcParms 修改
设置完中文后,默认使用 Unicode 负号,同样需要设置
plt.rcParams['font.sans-serif']=['SimHei'] --显示中文
plt.rcParams['axes.unicode_minus']=False --显示负号
使用 plt.grid() 方法
参数:
plt.grid(True,linestyle='--',color='gray',axis='y')
plt.show()
plt.gca() 可以定位要控制坐标轴的轴线,如果有多个图片可以先定位到对应要操作的图片,再使用该方法,我们当前只有一个图片,因此对应的就是图片的四条轴线
spines 指的就是轴,使用 set 对其修改
ax=plt.gca()
ax.spines['right'].set_color('none') # 设为透明
ax.spines['top'].set_color('none')
ax.spines['left'].set_position(('data',0))
# 位置设置的方法:
# ① data:元组,后面的数字代表挪动到的刻度值
# ② outward
# ③ axes:在整个轴上的比例取值0到1之间
需要特别眼熟,这个方法可以对图像很多默认配置进行设置,如字体的修改、图画分辨率、尺寸大小等等
plt.rcParams['figure.figsize']=(8,4) # 单位:英寸,默认6*4inch
plt.rcParams['figure.dpi']=300
plt.plot(x,y,color=xx,alpha=xx,linestyle=xx,linewidth=xx,maker=xx,makeredgecolor=xx,makersize=xx,makeredgewidth=xx)
常见:
由于各种符号标记不会重复,因此可以直接使用形如以下方式的缩写
plt.plot(x,y,'r-+')
绘图注意事项: