[英]multiple matplotlib subplots: interleave pandas dataframe HTML with each subplot
我有一個多行的pandas.DataFrame
(我要檢查的每筆交易1個)
trades = pandas.read_csv(...)
我想在matplotlib子圖中繪制每筆交易。 我使用len(trades)
創建pyplot.figure
以創建足夠的高度
fig = pyplot.figure(figsize=(40,15 * len(trades)))
然后,我遍歷每筆交易並生成一個圖
for i,r in enumerate(trades.iterrows()):
_, trade = r
start = trade.open_time - datetime.timedelta(seconds=30)
end = trade.close_time + datetime.timedelta(seconds=30)
b = bids[start:end]
a = asks[start:end]
ax = fig.add_subplot(len(trades),1,i+1)
# plot bid/ask
ax.plot_date(b.index, b, fmt='-', label='bid')
ax.plot_date(a.index, a, fmt='-', label='ask')
# plot entry/exit markers
ax.plot(trade.open_time, trade.open_price, marker='o', color='b')
ax.plot(trade.close_time, trade.close_price, marker='o', color='r')
ax.set_title("Trade {}".format(i+1, fontsize=10)
ax.set_xlabel("Date")
ax.set_ylabel("Price")
ax.legend(loc='best', fontsize='large')
pyplot.show()
# free resources
pyplot.close(fig.number)
這很好。
但是,現在,我想顯示有關交易的數據框的渲染HTML。
由於我是在jupyter筆記本中執行此操作的,因此從此SO答案中,我能夠找到以下片段,這些片段將以html顯示我的數據框:
t = pandas.DataFrame(trades.iloc[i]).T
IPython.display.display(IPython.display.HTML(t.to_html())
我將此代碼段插入循環中。
問題在於,每筆交易的渲染HTML數據框都是一個接一個地打印的,然后在所有數據框都打印完之后,打印圖。
+-----------+
| dataframe |
+-----------+
+-----------+
| dataframe |
+-----------+
+-----------+
| dataframe |
+-----------+
+------+
| |
| plot |
| |
+------+
+------+
| |
| plot |
| |
+------+
+------+
| |
| plot |
| |
+------+
鑒於我已經創建了一個大的pyplot.figure
,並且在循環之后調用了pyplot.show()
,這很有意義-在循環內部我輸出數據幀HTML,並在循環之后顯示該圖。
題:
如何交錯筆記本HTML和每個子圖?
+-----------+
| dataframe |
+-----------+
+------+
| |
| plot |
| |
+------+
+-----------+
| dataframe |
+-----------+
+------+
| |
| plot |
| |
+------+
+-----------+
| dataframe |
+-----------+
+------+
| |
| plot |
| |
+------+
我相信您需要創建三個單獨的圖形並在循環內調用plt.show()
。 這樣的事情(注意,我認為 pyplot.close
使用Jupyter筆記本前端pyplot.close):
trades = pandas.read_csv(...)
for i, r in enumerate(trades.iterrows()):
_, trade = r
start = trade.open_time - datetime.timedelta(seconds=30)
end = trade.close_time + datetime.timedelta(seconds=30)
b = bids[start:end]
a = asks[start:end]
fig, ax = plt.subplots(figsize=(40, 15))
# plot bid/ask
ax.plot_date(b.index, b, fmt='-', label='bid')
ax.plot_date(a.index, a, fmt='-', label='ask')
# plot entry/exit markers
ax.plot(trade.open_time, trade.open_price, marker='o', color='b')
ax.plot(trade.close_time, trade.close_price, marker='o', color='r')
ax.set_title("Trade {}".format(i+1, fontsize=10))
ax.set_xlabel("Date")
ax.set_ylabel("Price")
ax.legend(loc='best', fontsize='large')
t = pandas.DataFrame(trades.iloc[i]).T
IPython.display.display(IPython.display.HTML(t.to_html())
pyplot.show()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.