我有一些問題要繪制圖表,我想知道是否有人可以幫助我。這是我的情況:
我有兩個陣列:一個用于溫度值,另一個用于時間。
我的目標是制作一個表示溫度隨時間變化的圖表,每次在我的陣列中附加一個值時(每 0.2 秒)都會自動重繪 。
這是我嘗試過的代碼,但它根本不起作用。我對 Python 和情節一點也不自在,對所有這些錯誤感到抱歉
import matplotlib.pyplot as plt
import random
import time
# My arrays are empty at the beginning
raw_temp_bme = []
temps = []
plt.ion()
fig, ax = plt.subplots(figsize=(8, 6))
line1, = ax.plot(temps, raw_temp_bme, "r")
plt.title("Température du BME680 en fonction du temps")
plt.xlabel("Temps en ms")
plt.ylabel("Température en °C")
start_time = time.time()
while True:
# I append my two arrays
raw_temp.append(round(random.uniform(15.0, 30.0), 2))
temps.append(round(time.time() - start_time, 2))
line1.set_xdata(temps)
line1.set_ydata(raw_temp_bme)
fig.canvas.draw()
fig.canvas.flush_events()
time.sleep(0.2)
這是我所擁有的截圖
我的圖表中沒有任何內容。
非常感謝你提前
uj5u.com熱心網友回復:
可能您的資料只是繪制在未自動縮放的視圖之外。最小的例子:
import matplotlib.pyplot as plt
import random
import time
# My arrays are empty at the beginning
raw_temp_bme = [30]
temps = [0]
plt.ion()
fig, ax = plt.subplots(figsize=(8, 6))
line1, = ax.plot(temps, raw_temp_bme, "r")
#simulating your sensor data
def get_temperature_bme680():
x = random.random()
temps.append(temps[-1] x)
raw_temp_bme.append(raw_temp_bme[-1] 2 * random.random() - 1)
if len(temps) > 50:
temps[:] = temps[1:]
raw_temp_bme[:] = raw_temp_bme[1:]
time.sleep(x)
while True:
get_temperature_bme680() # my fonction to append my arrays
line1.set_xdata(temps)
line1.set_ydata(raw_temp_bme)
ax.set_xlim(min(temps), max(temps))
ax.set_ylim(min(raw_temp_bme), max(raw_temp_bme))
fig.canvas.draw()
fig.canvas.flush_events()
time.sleep(0.0002)
plt.show()
uj5u.com熱心網友回復:
在此處輸入影像描述 raw_temp_bme,這 get_temperature_bme680是您必須正確重寫程式的主要錯誤,錯誤在 Jupyter Notebook 中詳細顯示,您可以查看給出的錯誤
uj5u.com熱心網友回復:
在我看來,主要問題不在于繪圖,而在于您添加到串列的方式。嘗試用get_temperature_bme680該函式的代碼替換(或發布該函式的代碼,以便我們不必猜測)。此外,該行line1, = ax.plot(temps, raw_temp_bme, "r") 可能無法正常作業,因為raw_temp_bme它不存在。
這是如何制作影片的最小示例:https ://stackoverflow.com/a/70439692/12343828
通過更新代碼并列印兩個串列的內容,很明顯出了什么問題:需要設定 xlim/ylim 以使資料在繪圖范圍內。如果你插入
ax.set_xlim(min(temps), max(temps))
ax.set_ylim(min(raw_temp_bme), max(raw_temp_bme))
就在fig.canvas.draw()那之前應該做的伎倆。
PS.:您還必須更正raw_temp.append(...).
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/424607.html
標籤:Python matplotlib 图形
上一篇:如何使用正確的文本旋轉注釋回歸線
