plot_date和matplotlib中的多个列子图。如何使用plot_date将1列更改为2列子图?

时间:2015-01-03 20:57:11

标签: python datetime matplotlib time-series subplot

我正在使用plot_date命令在matplotlib中绘制时间序列数据。

在以下代码中,dt_str_etc和BTOTetc引用了datetime格式化数据的数组。我的部分准则如下:

import matplotlib.pylab as plt
import matplotlib.dates as dates
from datetime import datetime

f,axarr=plt.subplots(nrows=9,sharex=False)

axarr[0].plot_date(dt_str_16h25,BTOT16h25,fmt='-k')
axarr[1].plot_date(dt_str_16h26,BTOT16h26,fmt='-k')
axarr[2].plot_date(dt_str_16h27,BTOT16h27,fmt='-k')
axarr[3].plot_date(dt_str_16h28,BTOT16h28,fmt='-k')
axarr[4].plot_date(dt_str_16h29,BTOT16h29,fmt='-k')
axarr[5].plot_date(dt_str_16h30,BTOT16h30,fmt='-k')
axarr[6].plot_date(dt_str_16h31,BTOT16h31,fmt='-k')
axarr[7].plot_date(dt_str_16h32,BTOT16h32,fmt='-k')
axarr[8].plot_date(dt_str_16h33,BTOT16h33,fmt='-k')

现在,上面的代码正常工作。 plot_date的功能正如您所期望的那样,我得到了一个包含9个子图的漂亮情节以及漂亮的时间序列......

我想要做的是绘制上面的9个图不是在一列而是两列[基本上2乘5(有一个未占用的空间)]]。多列圆柱形图。我尝试使用以下代码执行此操作:

import matplotlib.pylab as plt
import matplotlib.dates as dates
from datetime import datetime

f,axarr=plt.subplots(nrows=5,ncols=2,sharex=False)

axarr[0].plot_date(dt_str_16h25,BTOT16h25,fmt='-k')
axarr[1].plot_date(dt_str_16h26,BTOT16h26,fmt='-k')
axarr[2].plot_date(dt_str_16h27,BTOT16h27,fmt='-k')
axarr[3].plot_date(dt_str_16h28,BTOT16h28,fmt='-k')
axarr[4].plot_date(dt_str_16h29,BTOT16h29,fmt='-k')
axarr[5].plot_date(dt_str_16h30,BTOT16h30,fmt='-k')
axarr[6].plot_date(dt_str_16h31,BTOT16h31,fmt='-k')
axarr[7].plot_date(dt_str_16h32,BTOT16h32,fmt='-k')
axarr[8].plot_date(dt_str_16h33,BTOT16h33,fmt='-k')

这会返回错误:

Traceback (most recent call last):
      File "C:/Users/Charles/Google Drive/Year 4 Real/MPhys Project/Mag     Data/2007/Mag_data_2007_plot_T 25 26 27 28 29 30 31 32 33 adjusted.py", line 118, in <module>
    axarr[1].plot_date(dt_str_16h25,BTOT16h25,fmt='-k')
AttributeError: 'numpy.ndarray' object has no attribute 'plot_date'

我所做的就是写“ncols = 2”。这是唯一的区别。为什么我不能再使用plot_date命令以这种方式绘图?

我已经阅读了关于使用“add_subplot”关于潜行的subplot matplotlib文档的一些信息。如果需要,我可以用这个来编写代码,但我真的想保持原样。有什么想法吗?

非常感谢您提供的任何帮助或想法。

1 个答案:

答案 0 :(得分:1)

当绘图布局有多个行和列时,返回的数组是二维的。您需要使用axarr[0, 0]axarr[0, 1]等内容访问各个子图。