matplotlib的图像位于Figure对象中,创建Figure

fig = plt.figure()

不能通过空Figure绘图,必须为其创建subplot

ax1 = fig.add_subplot(2, 2, 1)

上面参数表示,图像是2x2,选中4个subplot中的第1个。

创建另外两个subplot

ax2 = fig.add_subplot(2, 2, 2)
ax3 = fig.add_subplot(2, 2, 3)

如果此时发出绘图命令,matplotlib会在最后一个用过的subplot上绘制

from numpy.random import randn
plt.plot(randn(50).cumsum(), 'k--')

k--是线型选项,此处是黑色虚线图。fig.add_subplot返回的对象是AxesSubplot对象

_ = ax1.hist(randn(100), bins=20, color='k', alpha=0.3)
ax2.scatter(np.arange(30), np.arange(30) + 3 * randn(30))

更为方便的方法

fig, axes = plt.subplots(2, 3)

调整subplot周围的间距

默认,matplotlib会在subplot外围留下一定的边距,并在subplot之间留下一定间距

plt.subplots_adjust(left=None, bottom=None, right=None, top=None,
                wspace=None, hspace=None)

下面例子将边距收缩为0

fig, axes = plt.subplots(2, 2, sharex=True, sharey=True)
for i in range(2):
    for j in range(2):
        axes[i, j].hist(randn(500), bins=50, color='k', alpha=0.5)
plt.subplots_adjust(wspace=0, hspace=0)

颜色、标记、线型

matplotlib的plot函数接受一组X和Y坐标,还可以接受一个表示颜色和线型的字符串缩写。

根据x和y绘制绿色虚线

ax.plot(x,y,'g--')
ax.plot(x,y,linestyle='--',color='g')

标记也可以放到格式字符中,标记类型和线型必须放在颜色后面

plt.plot(randn(30).cumsum(), 'ko--')

更为明确的形式是

plot(randn(30).cumsum(),color='k',linestyle='dashed',marker='o')

在线型图中,非实际数据点默认是按照线性方式插值的,可以通过drawstyle选项修改

data = randn(30).cumsum()
plt.plot(data, 'k--', label='Default')
plt.plot(data, 'k-', drawstyle='steps-post', label='steps-post')
plt.legend(loc='best')

刻度、标签和图例

对大多数图标装饰项,主要有两种实现方式:

  • 过程型pyplot接口

  • 面向对象的原生matplotlib API

fig = plt.figure(); ax = fig.add_subplot(1, 1, 1)
ax.plot(randn(1000).cumsum())

ticks = ax.set_xticks([0, 250, 500, 750, 1000])
labels = ax.set_xticklabels(['one', 'two', 'three', 'four', 'five'],
                            rotation=30, fontsize='small')
ax.set_title('My first matplotlib plot')
ax.set_xlabel('Stages')

添加图例

fig = plt.figure(); ax = fig.add_subplot(1, 1, 1)
ax.plot(randn(1000).cumsum(), 'k', label='one')
ax.plot(randn(1000).cumsum(), 'k--', label='two')
ax.plot(randn(1000).cumsum(), 'k.', label='three')

ax.legend(loc='best')

主机以及在Subplot上绘图

注解可以通过text、arrow和annotate等函数添加

from datetime import datetime

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)

data = pd.read_csv('spx.csv', index_col=0, parse_dates=True)
spx = data['SPX']

spx.plot(ax=ax, style='k-')

crisis_data = [
    (datetime(2007, 10, 11), 'Peak of bull market'),
    (datetime(2008, 3, 12), 'Bear Stearns Fails'),
    (datetime(2008, 9, 15), 'Lehman Bankruptcy')
]

for date, label in crisis_data:
    ax.annotate(label, xy=(date, spx.asof(date) + 50),
                xytext=(date, spx.asof(date) + 200),
                arrowprops=dict(facecolor='black'),
                horizontalalignment='left', verticalalignment='top')

# Zoom in on 2007-2010
ax.set_xlim(['1/1/2007', '1/1/2011'])
ax.set_ylim([600, 1800])

ax.set_title('Important dates in 2008-2009 financial crisis')

results matching ""

    No results matching ""