gridspec的两个子图,一个线图和另一个条形图,x上的时间序列不显示

时间:2016-09-08 04:51:20

标签: python python-2.7 pandas matplotlib bar-chart

我无法弄清楚我在绘图中做错了什么。 在两个子图上绘制一些数据与日期时间,一个是线图,另一个应该是条形图。我已经尝试了几种不同的方式来绘制它,但没有取得多大成功。

更新  次要进度 - 显示第一个图,第二个不显示。

数据的例子如下:

                    A  B    C
0 2014-10-23 15:44:00  1  1.5
1 2014-10-30 19:10:00  2  2.0
2 2014-11-05 21:30:00  3  3.3
3 2014-11-07 05:50:00  4  4.0
4 2014-11-12 12:20:00  5  5.8

最新版本的代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import gridspec
import datetime

Test = pd.DataFrame({'A':[datetime.datetime(2014,10,23,15,44),datetime.datetime(2014,10,30,19,10),
datetime.datetime(2014,11,5,21,30),datetime.datetime(2014,11,7,5,50), 
datetime.datetime(2014,11,12,12,20)],'B':[1,2,3,4,5],'C':[1.5,2,3.3,4,5.8]})

fig = plt.figure(figsize=(8,8))

gs=gridspec.GridSpec(2,1, hspace=0.1, wspace=0.3, height_ratios=[1,1])

axes1 = plt.subplot(gs[0,0])
ax1 = plt.plot(Test["A"],Test["B"], 'dimgrey', linewidth = 2.5, label = "test")
#DepTime = DepTime.set_index("DATETIME")
#for l in log_times:
#    ax1 = plt.bar(l,DepTime.ix[l,"Depth"], width = 1.5, color='b')
ax1 = plt.xlim(Test.iloc[0,0],Test.iloc[-1,0])
xticks2 = pd.date_range(start=Test.iloc[0,0],end=Test.iloc[-1,0], freq='D', normalize=True) 
ax1 = plt.xticks(xticks2,xticks2)
ax1 = plt.setp(axes1.get_xticklabels(), visible=False)
ax1 = plt.ylim(1,5)
ax1 = plt.yticks(np.arange(0,5,1),rotation=0)
ax1 = plt.ylabel("B",fontsize = 12)

axes2 = plt.subplot(gs[1,0])
ax2 = Test.plot("A","C",kind='bar', ax=axes2) #
#ax2 = plt.bar(Test["A"],Test["C"],color='k')
#ax2 = plt.xlim(Test.iloc[0,0],Test.iloc[-1,0])
ax2 = plt.xlim(Test.iloc[0,0],Test.iloc[-1,0])
ax2 = plt.xlabel("A",fontsize=12)
#ax2 = plt.xaxis_date()
#ax2.xaxis.set_major_formatter(mdates.DateFormatter('%d))
ax2 = plt.xticks(xticks2,xticks2, rotation=45)
#axes2.xticklabels([x.strftime('%d/%m/%Y %H:%M') for x in xticks2])
#ax2.autofmt_xdate()
#ax2 = plt.yticks([0,1])
ax2 = plt.ylim(1,5)
ax2 = plt.setp(axes2.get_yticklabels(), visible=False)
fig = plt.show()

由此产生的数字: The incomplete plot

1 个答案:

答案 0 :(得分:0)

我发现问题是什么!!!我不明白为什么它在线图上工作得很好而不是条形图,但是代码中需要更改的只是条形图的实际一行。它应该是这样的:

ax2 = plt.bar(Test["A"].values,Test["C"],width=1)

因此条形图无法处理日期时间? (这answer有帮助)