私は2週間しかPythonを使用していません。 MatplotlibでArduinoからのデータをプロットするのに問題はありません。しかし、プロットはポップウィンドウとして表示され、そのプロットはtkinterで作っているGUIのルートウィンドウにキャンバスにしか表示されません。私は物事の複数の組み合わせを試して、私はそれを働かせることができません。私はコードにプロット値を追加する場合、のは言わせて:ArduinoのMatplotlibライブプロットデータをtkinterキャンバスに埋め込む
a.plot([1, 2, 3, 4, 5], [2, 3, 4, 5, 6, 7])
のArduinoからデータを取得するときに私の主な問題は、その後、whileループであるので、それは、正常に動作します。私はプロットを更新するためにdrawnowオプションを試しましたが、私は同じ正確な結果を得ます。私が何をしても、プロットを別のウィンドウとして表示されなくすることはできません。
[背面のメインGUIウィンドウでプロットウィンドウ] [1]
ここで私が使用しているサンプルコードです:
import serial
from tkinter import *
import numpy as np
from matplotlib import pyplot as plt
import matplotlib.animation as animation
from matplotlib import style
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
root = Tk()
root.geometry('1200x700+200+100')
root.title('This is my root window')
root.state('zoomed')
root.config(background='#fafafa')
yar = []
plt.ion()
style.use('ggplot')
fig = plt.figure(figsize=(14, 4.5), dpi=100)
ax1 = fig.add_subplot(1, 1, 1)
ser = serial.Serial('com3', 9600)
def animate(i):
while True:
ser.reset_input_buffer()
data = ser.readline().decode("utf-8")
data_array = data.split(',')
yvalue = float(data_array[1])
yar.append(yvalue)
print(yvalue)
plt.ylim(0, 100)
ax1.plot(yar, 'r', marker='o')
plt.pause(0.0001)
plotcanvas = FigureCanvasTkAgg(fig, root, animate)
plotcanvas.get_tk_widget().grid(column=1, row=1)
ani = animation.FuncAnimation(fig, animate, interval=1000, blit=True)
plotcanvas.show()
root.mainloop()
ありがとうございました!それは完璧に働く、まさに私が探していたものです。他のヒントをありがとう、今私はコードの仕組みをよりよく理解している。 –