Axis中的子图日期格式

时间:2019-05-24 11:27:17

标签: python matplotlib subplot python-datetime

我有一个2x2图,两个图的x轴都带有日期。我已经使用datetime.strptime string 带入type = datetime.datetime对象格式。

但是我计划有大约12个子图,并且按以下方式进行此操作似乎很麻烦。

有没有更好的“ pythonic”方式?

这就是我所拥有的:

 xx.xaxis.set_major_formatter(mdates.DateFormatter('%d/%m/%y %H:%M'))
 plt.grid(True)
 plt.ylabel('paramA',fontsize=8, color = "blue")
 plt.tick_params(axis='both', which='major', labelsize=8)
 plt.plot(date_list, myarray[:,0], '-b', label='paramA')
 plt.setp(plt.xticks()[1], rotation=30, ha='right') # ha is the same as horizontalalignment

 xx = plt.subplot(2,1,2)
 xx.xaxis.set_major_formatter(mdates.DateFormatter('%d/%m/%y %H:%M'))
 plt.grid(True)
 plt.ylabel('paramB', 'amount of virtual mem',fontsize=8, color = "blue")
 plt.tick_params(axis='both', which='major', labelsize=8)
 plt.plot(date_list, myarray[:,1], '-y', label='paramB')plt.setp(plt.xticks()[1], rotation=30, ha='right') # ha is the same as horizontalalignment ```

PS:最初,我尝试按以下方式定义图。但是,这不起作用:

fig, axs = plt.subplots(2,1,figsize=(15,15)) 
plt.title('My graph')     
for ax in enumerate(axs):
   ax.xaxis.set_major_formatter(mdates.DateFormatter('%d/%m/%y %H:%M:%S'))

1 个答案:

答案 0 :(得分:1)

您未能提供任何数据或Minimal, Complete, and Verifiable example。但是,这样的事情应该起作用。您可以通过在第一个命令中使用所需的行数和列数,将其扩展为实际情况。

fig, axes = plt.subplots(nrows=2, ncols=3)
labels = ['paramA', 'paramB', 'paramC', 'paramD', 'paramE', 'paramF']

for i, ax in enumerate(axes.flatten()):
    ax.xaxis.set_major_formatter(mdates.DateFormatter('%d/%m/%y %H:%M'))
    ax.grid(True)
    ax.set_ylabel(labels[i], fontsize=8, color="blue")
    ax.tick_params(axis='both', which='major', labelsize=8)
    ax.plot(date_list, myarray[:,i], '-b', label=labels[i])
    plt.setp(plt.xticks()[1], rotation=30, ha='right') # ha is the same as horizontalalignment

编辑:

将代码更改为

fig, axs = plt.subplots(2,1,figsize=(15,15)) 
plt.title('My graph')     
for ax in axs:
   ax.xaxis.set_major_formatter(mdates.DateFormatter('%d/%m/%y %H:%M:%S'))