独立控制子图

时间:2015-07-10 14:57:32

标签: python matplotlib

以下代码(最重要的部分)

import csv
import sys
import datetime
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider
from matplotlib.dates import DateFormatter
from pprint import pprint as pp

...

fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.25)

l, = plt.plot(x,y1, label="kw")
l, = plt.plot(x,y2, label="pred")

plt.xlabel('date/time')
plt.ylabel('kw_energy')
plt.title("Gym")
plt.legend()

formatter = DateFormatter('%m-%d %H:%M:%S')
plt.gcf().axes[0].xaxis.set_major_formatter(formatter)

locs, labels = plt.xticks()
plt.setp(labels, rotation=45)

plt.grid()

x_min_index = 0
x_max_index = 96

x_min = x[x_min_index]
x_max = x[x_max_index]

x_dt = x_max - x_min

y_min = plt.axis()[2]
y_max = plt.axis()[3]

plt.axis([x_min, x_max, y_min, y_max])

axcolor = 'lightgoldenrodyellow'
axpos = plt.axes([0.2, 0.1, 0.65, 0.03], axisbg=axcolor)

slider_max = len(x) - x_max_index - 1

spos = Slider(axpos, 'Pos', matplotlib.dates.date2num(x_min), matplotlib.dates.date2num(x[slider_max]))
spos.valtext.set_visible(False)

def update(val):
    pos = spos.val
    xmin_time = matplotlib.dates.num2date(pos)
    xmax_time = matplotlib.dates.num2date(pos) + x_dt
    # DEBUG:
    print "x_min: %s, x_max: %s" % (xmin_time.strftime("%Y-%m-%d %H:%M:%S.%f"), xmax_time.strftime("%Y-%m-%d %H:%M:%S.%f"))
    print pos
    print spos.valtext
    print "##################"

    xmin_time = pos
    ax.axis([xmin_time, xmax_time, y_min, y_max])

spos.on_changed(update)

plt.show()

制作此情节 enter image description here

现在我想添加另一个子图并能够独立控制两个子图。我有这个:

plt.close('all')
fig, ax = plt.subplots(nrows=2, ncols=1)
plt.subplots_adjust(bottom=0.25)

line0 = ax[0].plot(x,y1, lw=2, label='kw_energy_consumption')
line1 = ax[1].plot(x,y2, lw=2, label='prediction')

现在我想为整个图形设置名称,也为特定的子图形设置名称。我试过这个萌芽给出了一个错误:

line0.set_title("Title for second plot")

然后我读到了关于在情节和数字之间切换的内容,但它也给出了错误

plt.subplots(211)

plt.subplots(1)

如何独立控制两个子图?

1 个答案:

答案 0 :(得分:1)

您只需说出即可为ax[0]添加标题

ax[0].set_title('blah')

您无法为贴片设置标题(在您的情况下是线对象)。

有趣的是,ax对象的方法通常与matplotlib.pyplot的对象相对应。