熊猫子图上的多个地块

时间:2019-03-13 01:09:47

标签: pandas python-2.7 matplotlib

假设我有一个看起来像这样的数据框(按日期编制索引):

Value1 Value2 Value3 Value4 Value5
1      1      3      4      -1    
2      2      3      4      1
3      3      3      2      -1

这些值并不重要,但我想举一个例子。

我有一个看起来很基本的问题。我正在尝试绘制MACD图表,类似于找到的here。我想要一个具有股票价格且其下方紧靠MACD线的图。我有子图工作,但我不知道如何在同一张图表上获得线图和条形图。我尝试了以下方法:

fig, axes = plt.subplots(nrows=2, ncols=1, sharex=True, squeeze=False)
ind3.iloc[:,0].plot(title="Stock Price", ax=axes[0,0], fontsize=12, color=colors)
ind3.iloc[:,1:-1].plot(title="MACD", ax=axes[1,0], fontsize=12, color=colors)
ind3.iloc[:,-1].plot(title="MACD", ax=axes[1,0], kind='bar',fontsize=12, color=colors)

这将导致乱码,如下所示:

Chart

有人可以帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:1)

这可能与您使用iloc进行索引的方式有关,但是如果不查看其余代码就很难分辨。

子图中的多个图只需要您在特定子图上调用plot / bar,然后将要绘制的数据传递给它。一般来说,结构看起来像这样……

生成一些测试数据:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.randint(0,100,size=(10,2)), columns=list('AB'))
df['time'] = pd.date_range('2019-03-01', periods=10, freq='1D')
df = df.set_index('time')
print(df)

             A   B
time              
2019-03-01  12  73
2019-03-02  46  12
2019-03-03  41  10
2019-03-04  18  89
2019-03-05  60  98
2019-03-06  57  23
2019-03-07  59  73
2019-03-08  76  41
2019-03-09  71  34
2019-03-10  38  16

创建情节:

fig, ax = plt.subplots(nrows=2, ncols=1, figsize=(8,10))
ax[0].set_title('Stock Price')
ax[1].set_title('MACD')

ax[1].plot(df.index, df['A'], color='b', label='Signal')
ax[1].bar(df.index, df['B'], color='g', label='MACD')

ax[1].set_xticklabels(df.index, rotation=90)

plt.legend(loc=1)
plt.tight_layout()
plt.show()

enter image description here