九、技巧
1. 共享坐标轴
当你通过
pyplot.subplot()
、pyplot.axes()
函数或者Figure.add_subplot()
、Figure.add_axes()
方法创建一个Axes
时,你可以通过sharex
关键字参数传入另一个Axes
表示共享X轴;或者通过sharey
关键字参数传入另一个Axes
表示共享Y轴。共享轴线时,当你缩放某个
Axes
时,另一个Axes
也跟着缩放。
2. 创建多个 subplot
如果你想创建网格中的许多
subplot
,旧式风格的代码非常繁琐:#旧式风格
fig=plt.figure()
ax1=fig.add_subplot(221)
ax2=fig.add_subplot(222,sharex=ax1,sharey=ax1)
ax3=fig.add_subplot(223,sharex=ax1,sharey=ax1)
ax4=fig.add_subplot(224,sharex=ax1,sharey=ax1)
新式风格的代码直接利用
pyplot.subplots()
函数一次性创建:
#新式风格的代码
fig,((ax1,ax2),(ax3,ax4))=plt.subplots(2,2,sharex=True,sharey=True)
ax1.plot(...)
ax2.plot(...)
...
它创建了Figure
和对应所有网格SubPlot
。你也可以不去解包而直接:
#新式风格的代码
fig,axs=plt.subplots(2,2,sharex=True,sharey=True)
ax1=axs[0,0]
ax2=axs[0,1]
ax3=axs[1,0]
ax4=axs[1,1]
...
...
返回的axs
是一个nrows*ncols
的array
,支持numpy
的索引。
3. 调整日期显示
当
x
轴为时间日期时,有可能间隔太密集导致显示都叠加在一起。此时可以用matplotlib.figure.Figure.autofmt_xdate()
函数来自动调整X轴日期的显式。你也可以调整X轴的显示格式。当X轴为时间时,其显示由
Axes.fmt_xdata
属性来提供。该属性是一个函数对象或者函数,接受一个日期参数,返回该日期的显示字符串。matplotlib
已经提供了许多date formatter
,你可以直接使用ax.fmt_xdata=matplotlib.dates.DateFormatter('%Y-%m-%d')
4. 放置 text box
当你在
Axes
中放置text box
时,你最好将它放置在axes coordinates
下,这样当你调整X轴或者Y轴时,它能够自动调整位置。你也可以使用
Text
的.bbox
属性来让这个Text
始终放在某个Patch
中。其中.bbox
是个字典,它存放的是该Patch
实例的属性。
5. LATEX文字
- 要想在文本中使用
LATEX
,你需要使用'$...$'
这种字符串(即使用'$'
作为界定符)。通常建议使用raw
字符串,即r'$...$'
的格式,因为原生字符串不会转义'\'
,从而使得大量的LATEX
词法能够正确解析。
6. 平移坐标轴:
Axes.spines
是个字典,它存放了四个键,分别为:Axes.spines['left],Axes.spines['right],Axes.spines['top],Axes.spines['bottom]
他们都是一个matplotlib.spines.Spine
对象,该对象继承自matplotlib.patches.Patch
对象,主要是设置图形边界的边框。Spine.set_color('none')
:不显示这条边线Spine.set_position((position))
:将边线移动到指定坐标,其中position
是一个二元元组,指定了(position type,amount)
,position type
可以是:outward
:在绘图区域之外放置边线,离开绘图区域的距离由amount
指定(负值则在会去区域内绘制)axes
:在Axes coordinate
内放置边线(从 0.0 到 1.0 )data
:在data coordinate
内放置边线
你也可以指定
position
为 :'center'
,等价于('axes',0.5)
;或者'zero'
,等价于('data',0.0)
7. 清除绘图
你可以通过
pyplot
来清除绘图:pyplot.cla()
:清除current axis
。非当前axis
不受影响pyplot.clf()
:清除current figure
。但是它不关闭window
pyplot.close()
:关闭window
你也可以通过面向对象的方法:
Figure.clf()
:清除该Figure
对象的所有内容。
8. 清除X坐标和Y坐标:
Axes.set_xticks(())
Axes.set_yticks(())
Axes.set_axis_off() #清除 tick 和边框
9. 设置中文
在linux
下,为了支持中文,则在开头设置:
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #matplotlib 中文字体