0

私はmatplotlibでリアルタイムプロットを作成しています.hpwever x軸を取得してリアルタイムで目盛りを更新することはできません。たとえば、目盛りが最大5分間隔に設定されている場合、各目盛りの発生時間を取得したいだろう10:20,10:25,10:30,etc。私が現在行っていることは機能しません。配列に新しい時間を追加してから、配列を xtick に呼び出します。配列:

self.datetime1 = time.localtime()
self.datetime1 = timeString  = time.strftime("%m-%d %H:%M:%S", self.datetime1)
self.date.append(self.datetime1)

xticks:

self.ax1.set_xticklabels(self.date)
4

1 に答える 1

1

これがあなたにとって意味があるかどうか教えてください。私はこの例をまとめましたが、それは最も美しいものではありません。重要なのは、plot_time(ars...) を使用して、matplotlib に数値を探して正しくフォーマットするように指示することだと思います。

python[2.7.2]、matplotlib、numpy を使用:

import numpy as np
from matplotlib import pyplot as plt
import random, sys
from datetime import datetime, timedelta
import time

tWindow=1 #moving window in minutes

timeList=[datetime.now()]
valList=[random.randint(1, 20)]

fig = plt.figure() #Make a figure
ax = fig.add_subplot(111) #Add a subplot

#Create the line with initial data using plot_date to add time to the x axis
line,=plt.plot_date(timeList, valList, linestyle='-') 

#Set the x limits to the time window
ax.set_xlim([datetime.now()-timedelta(seconds=tWindow*60),datetime.now()])

#set the y limits
ax.set_ylim(0,20)

#grab the blank background to clear the plot later
background = fig.canvas.copy_from_bbox(ax.bbox)

#show the figure
fig.show()

#loop
for i in range(100):
    #restore the background
    fig.canvas.restore_region(background)

    #add time to time list
    timeList.append(datetime.now())

    #add random value to values
    valList.append(random.randint(1, 20))

    #update the line data
    line.set_data(timeList,valList)

    #update x limits
    ax.set_xlim([datetime.now()-timedelta(seconds=tWindow*60),datetime.now()])

    #redraw widnow
    fig.canvas.draw()

    #pause the loop for .5 seconds
    time.sleep(0.5)

プロデュース: コード出力

アップデート:

あなたが取り組んでいると思われるコードを含むあなたの他の投稿を見つけました。

交換してみる

self.l_user, = self.ax.plot([],self.user, label='Total %')

self.l_user, = self.ax.plot_date([],self.user, label='Total %')

タイムスタンプを matplotlib に渡すことができるようになりました。

def timerEvent(self, evt):
        # get the cpu percentage usage
        result = self.get_cpu_usage()
        # append new data to the datasets
        self.user.append(result[0])
        # update lines data using the lists with new data
        self.l_user.set_data(range(len(self.user)), self.user)
        # force a redraw of the Figure
        self.fig.canvas.draw()
           #else, we increment the counter
        self.cnt += 1

の行に沿って何かをやってみてください

def timerEvent(self, evt):
        # get the cpu percentage usage
        result = self.get_cpu_usage()
        # append new data to the datasets
        self.user.append(result[0])
        #save the current time
        self.timeStamp.append(datetime.now())
        # update lines data using the lists with new data
        self.l_user.set_data(self.timeStamp, self.user)
        #rescale the x axis maintaining a 5 minutes window
        self.ax.set_xlim([datetime.now()-timedelta(seconds=5*60),datetime.now()])
        # force a redraw of the Figure, this might not update the x axis limits??
        self.fig.canvas.draw()
           #else, we increment the counter
        self.cnt += 1

適切なインポートと変数の初期化

from datetime import datetime, timedelta

class CPUMonitor(FigureCanvas):
    """Matplotlib Figure widget to display CPU utilization"""
    def __init__(self):
        ...
        self.timeStamp=[]
        ...
于 2012-08-28T23:45:13.417 に答える