私は自分のつま先をPythonに浸しています。Matplotlibグラフを更新するためにここで助けてくださいました。グラフ付きのPythonデータ表示
がTimeStamp, ReadCount, Antenna, Protocol, RSSI, EPC, Sensor
09/28/2016 17:34:28.967, 5686, 2, GEN2, -25, E036115348A908CB, 23.16,0.00,0.00, (Infinity%),
09/28/2016 17:34:29.716, 5687, 2, GEN2, -32, E036115348A908CB, (Infinity%),
09/28/2016 17:34:31.155, 5689, 2, GEN2, -27, E036115348A908CB, 22.74,3.38, (Infinity%),
09/28/2016 17:34:32.351, 5692, 2, GEN2, -25, E036115348A908CB, 22.95,0.00,0.00,3.38, (Infinity%),
09/28/2016 17:34:32.895, 5695, 2, GEN2, -23, E036115348A908CB, 22.95,0.00,0.00,3.38, (Infinity%),
09/28/2016 17:34:33.397, 5698, 2, GEN2, -21, E036115348A908CB, 23.78,0.00,0.00,3.38, (Infinity%),
09/28/2016 17:34:33.946, 5699, 2, GEN2, -23, E036115348A908CB, 23.57,0.00,3.38, (Infinity%),
09/28/2016 17:34:34.912, 5702, 2, GEN2, -27, E036115348A908CB, 23.36,0.00,0.00,3.38, (Infinity%),
09/28/2016 17:34:35.394, 5705, 2, GEN2, -25, E036115348A908CB, 23.36,0.00,0.00,3.38, (Infinity%),
09/28/2016 17:34:35.988, 5707, 2, GEN2, -23, E036115348A908CB, 23.78,0.00,0.00,3.38, (Infinity%),
09/28/2016 17:34:36.489, 5710, 2, GEN2, -21, E036115348A908CB, 23.99,0.00,0.00,3.38, (Infinity%),
09/28/2016 17:34:37.269, 5712, 2, GEN2, -23, E036115348A908CB, 23.78,0.00,0.00,3.38, (Infinity%),
09/28/2016 17:34:37.796, 5715, 2, GEN2, -18, E036115348A908CB, 23.78,0.00,0.00,3.38, (Infinity%),
09/28/2016 17:34:38.296, 5718, 2, GEN2, -7, E036115348A908CB, 22.32,0.00,0.00,3.38, (Infinity%),
09/28/2016 17:34:38.826, 5721, 2, GEN2, -7, E036115348A908CB, 23.57,0.00,0.00,3.38, (Infinity%),
09/28/2016 17:34:39.320, 5724, 2, GEN2, -30, E036115348A908CB, 23.36,0.00,0.00,3.38, (Infinity%),
09/28/2016 17:34:39.870, 5727, 2, GEN2, -9, E036115348A908CB, 23.36,0.00,0.00,3.38, (Infinity%),
は、このデータは、センサーから来ている、と私はプルできるようにしたいと思います/いくつかを表示します。このプログラムは、次のようなデータを動的に成長しているCSVファイルからデータを取得するためのアニメーションを使用していますこのデータがこのグラフと共にディスプレイ上に含む他の値。プロットのためのコードは次のようになります。
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from datetime import datetime, timedelta
import collections
import csv
offset = 16
slope = -.2081
def plot(ax, data, colour, width):
if data:
last_dt = data[0][0]
gap = timedelta(seconds=10)
x = []
y = []
# Plot groups of data not more than 60 seconds apart
for dt, ten in data:
if dt <= last_dt + gap:
x.append(dt)
y.append(ten)
else:
ax.plot(matplotlib.dates.date2num(x), y, colour, linewidth=width)
x = [dt]
y = [ten]
last_dt = dt
ax.plot(matplotlib.dates.date2num(x), y, colour, linewidth=width)
def animate(i, fig, ax):
# Read in the CSV file
data = collections.defaultdict(list)
fields = ["TimeStamp", "ReadCount", "Antenna", "Protocol", "RSSI", "EPC", "Temp", "Ten", "Powr", "Unpowr", "Inf"]
with open('SensorLogFile.csv') as f_input:
csv_input = csv.DictReader(f_input, skipinitialspace=True, fieldnames=fields)
header = next(csv_input)
# Separate the rows based on the Antenna field
for row in csv_input:
try:
data[row['Antenna']].append(
[datetime.strptime(row['TimeStamp'], '%m/%d/%Y %H:%M:%S.%f'),
int(float(row['Ten']) * float(slope) + float(offset))])
except:
pass
# Drop any data points more than 1.5 mins older than the last entry
latest_dt = data[row['Antenna']][-1][0] # Last entry
not_before = latest_dt - timedelta(minutes=.25)
for antenna, entries in data.items():
data[antenna] = [[dt, count] for dt, count in entries if dt >= not_before]
# Redraw existing axis
ax.clear()
ax.spines['bottom'].set_color("#5998ff")
ax.spines['top'].set_color("#5998ff")
ax.spines['left'].set_color("#5998ff")
ax.spines['right'].set_color("#5998ff")
hfmt = matplotlib.dates.DateFormatter('%m/%d/%Y\n%I:%M:%S %p')
ax.xaxis.set_major_formatter(hfmt)
fig.autofmt_xdate()
plot(ax, data['1'], 'c', 6) # Antenna 1
plot(ax, data['2'], 'r', 6) # Antenna 2
plot(ax, data['3'], 'y', 6) # Antenna 3
ax.grid(True, color='w')
plt.ylabel('Tension (lb)', color='w', fontsize=20)
plt.title('Spiral 1 Tension', color='w', fontsize=26)
ax.tick_params(axis='y', colors='w')
ax.tick_params(axis='x', colors='w')
# ax.set_ylim([21,28])
fig = plt.figure(facecolor='#07000d')
ax = fig.add_subplot(111, axisbg='#07000d')
ani = animation.FuncAnimation(fig, animate, fargs=(fig, ax), interval=250)
plt.show()
私は置くことができる上に、グラフとグラフの下のオープンエリア(グラフの全幅を)持ってできるようにしたいのですが
が- 「温度」
- 「タイム」(現在の時刻) (各行の第七CSV、ちょうどFを℃に変換する必要があり):(おそらく、これらのデータのそれぞれのボックスを持っている)は、次の
- "オーバードライブ"(このデータには何も表示されず、将来的にはプレースホルダが表示されます)
- 右下の画像に「サイクル」(アンテナ1は、第一微小間隙後に読み出される回数であろう)
- ボックス - 例えば
このイメージを言うことができます私はTkinterを使用して見て、sentdexに従うようにしましたvideo here
しかし、それを動作させることができませんでした。
私は時間が掛かっており、これ以上ソロでは苦労することはできません。プロの助けが必要です。誰かが私に探しているもののようなディスプレイを作る方法について、私にある方向性/ガイダンスを教えてもらえますか?
1)理想的には、はい、本当の時間がいいだろう。リアルタイムにかなり近いことがわかっている瞬間、これは250 msごとに実行されています。 2)データがcsvに書き込まれているとき(すべてではない)、250msごとに新しい値が到着します。 3)このために対話性は必要ありません。上にグラフが表示されているディスプレイ、下に表示されているライブデータを表示して写真を表示するセルです。ああ、私はMatplotlibだけでそのすべてを行うことができますか?プロット作成コードは、データ(すなわち、temp)をプルし、式を実行してセルにライブ出力番号を表示するためにどのように見えるでしょうか? – Jeffrey
"Temp" "Time" "Overdrive" "Cycles"をグラフではなく数値形式にしますか? Matplotlibは言うまでもなく 'ax.text(x_coord、y_coord、" E036115348A908CB ")を使って簡単なテキストを表示することができます。プロットはすべて問題ではありません。問題は250msごとにファイルを読み取ることです。 – ImportanceOfBeingErnest
これは私が探しているものに非常に近いです!私はそれをテストしたし、x軸が前のようなデータの最後の '.25'分を表示していないように見えるが、今は固まって新しいデータを実際に表示していないようだ。温度は素晴らしいですが、時間の表示からは時間のデータを引っ張ってはいけませんが、コンピュータの時計などを使用してください(それ以外の場合は、センサーが範囲外になると時間が凍ります)。 – Jeffrey