2

Python と Matplotlib を使用してリアルタイムのローソク足チャートを表示したい

これは私がしました

#!/usr/bin/env python

import time
import matplotlib.pyplot as plt

from matplotlib.pyplot import plot, draw, show
from matplotlib.finance import candlestick
from matplotlib.dates import date2num

from numpy import nan
import numpy as np

fig = plt.figure()
ax = fig.add_subplot(111)

#plt.ion()
#plt.ioff()

while True:

    #plt.clf()

    #ax = plt.gca()

    opn =  104.04852126730329
    close = np.random.uniform(90, 110)
    high = max(opn, close)*np.random.uniform(1, 1.05)
    low = min(opn, close)*np.random.uniform(0.95, 1)
    DOCHLV = [[1, 100, 99, 101, 98, 0.0], [2, nan, nan, nan, nan, 0.0], [3, nan, nan, nan, nan, 0.0], [4, 104, 98, 105, 95, 0.0], [5, nan, nan, nan, nan, 0.0], [6, nan, nan, nan, nan, 0.0], [7, 100, 99.99976844819628, 100.91110690369828, 97.82248296015564, 1152.3258524820196], [8, 99.99976844819628, 100.51985544064271, 100.51985544064271, 96.65206230438159, 1578.5836411214814], [9, 100.51985544064271, 104.04852126730329, 104.54571702827914, 99.49632496479201, 1477.5651279091041], [10, opn, close, high, low, 372.6679262982206]]
    print(DOCHLV)

    #plt.close()

    fig = plt.figure()
    ax = fig.add_subplot(111)

    _ = candlestick(ax, DOCHLV, width=0.8, colorup='g', colordown='r', alpha=1.0)
    _ = ax.set_xlim(0, len(DOCHLV)+1)  

    #plt.show()
    plt.show(block=False)

    time.sleep(0.5)

残念ながら、ローソク足はいくつかの図に描かれています。

これを修正する方法はありますか?

私は削除しようとしました

    fig = plt.figure()
    ax = fig.add_subplot(111)

whileループから(同じ軸にプロットするため)、チャートは更新されません

plt. show(...) の代わりに plt. draw() も使用しようとしましたが、ウィンドウが表示されません

また、プロットする前に(前の)ウィンドウを閉じようとしました...しかし、そのような場合、チャートが点滅しています。

4

1 に答える 1

0

をご覧くださいmatplotlib.animation.FuncAnimationこれは、この例に基づいた使用方法のプロトタイプです。

#!/usr/bin/env python
from numpy import nan
import numpy as np

import matplotlib.pyplot as plt
from matplotlib.finance import candlestick
from matplotlib.animation import FuncAnimation

fig = plt.figure()
ax = fig.add_subplot(111)

def test(dummy):
    opn =  104.04852126730329
    close = np.random.uniform(90, 110)
    high = max(opn, close)*np.random.uniform(1, 1.05)
    low = min(opn, close)*np.random.uniform(0.95, 1)
    DOCHLV = np.array([[1, 100, 99, 101, 98, 0.0], [2, nan, nan, nan, nan, 0.0], [3, nan, nan, nan, nan, 0.0], [4, 104, 98, 105, 95, 0.0], [5, nan, nan, nan, nan, 0.0], [6, nan, nan, nan, nan, 0.0], [7, 100, 99.99976844819628, 100.91110690369828, 97.82248296015564, 1152.3258524820196], [8, 99.99976844819628, 100.51985544064271, 100.51985544064271, 96.65206230438159, 1578.5836411214814], [9, 100.51985544064271, 104.04852126730329, 104.54571702827914, 99.49632496479201, 1477.5651279091041], [10, opn, close, high, low, 372.6679262982206]])
    plt.cla()
    candlestick(ax, DOCHLV, width=0.8, colorup='g', colordown='r', alpha=1.0)
    ax.set_xlim(0, len(DOCHLV)+1)
anim = FuncAnimation(fig, test, interval=25)
anim.save('teste.mp4', fps=15)
于 2013-11-03T10:57:32.687 に答える