3
我在實驗中使用散景來實時繪製數據,並且該庫提供了一種方便的方法來執行此操作。根據實時繪圖中的值更改點顏色使用散景
這裏我的代碼片段來完成這項任務:
# do the imports
import pandas as pd
import numpy as np
import time
from bokeh.plotting import *
from bokeh.models import ColumnDataSource
# here is simulated fake time series data
ts = pd.date_range("8:00", "10:00", freq="5S")
ts.name = 'timestamp'
ms = pd.Series(np.arange(0, len(ts)), index=ts)
ms.name = 'measurement'
data = pd.DataFrame(ms)
data['state'] = np.random.choice(3, len(ts))
data['observation'] = np.random.choice(2, len(ts))
data.reset_index(inplace=True)
data.head()
接下來,我使用了下列剪斷將數據發送到服務器中實時
output_server("observation")
p = figure(plot_width=800, plot_height=400, x_axis_type="datetime")
x = np.array(data.head(2).timestamp, dtype=np.datetime64)
y = np.array(data.head(2).observation)
p.diamond_cross(x,y, size=30, fill_color=None, line_width=2, name='observation')
show(p)
renderer = p.select(dict(name="observation"))[0]
ds = renderer.data_source
for mes in range(len(data)):
x = np.append(x, np.datetime64(data.loc[mes].timestamp))
y = np.append(y, np.int64(data.loc[mes].observation))
ds.data["x"] = x
ds.data["y"] = y
ds._dirty = True
cursession().store_objects(ds)
time.sleep(.1)
這將產生一個非常不錯的結果,但是我需要改變空調的每個數據點的顏色一個值。
在這種情況下,條件是需要三個值 - 0,1和2的狀態變量。所以我的數據應該能夠反映這一點。 我花了幾個小時試圖弄清楚(坦承我是一個非常新的散景),任何幫助將不勝感激。
謝謝。我正在查看答案,但沒有一個提供關於如何去做的提示_real_time_。在你的例子中,你正在操作Dot對象,你可以提供調色板。在我的情況下,動作發生在我正在更新數據源對象的循環中。看起來數據源對象允許僅更新數據而不更新顏色。也許,我仍然錯過了一些明顯的東西,但我一直無法弄清楚。關鍵是對每個傳入數據點進行實時處理。 –
您是否需要在繪製點後重新分類點,還是僅僅需要添加顏色?你有一個上限,可以讓你指定一個人工大的調色板,但只使用你需要的顏色,當你走?你能負擔得起重繪擴大的數據集? – Prune
我需要隨時添加顏色。在上面我模擬數據的例子中,所有數據點都可以預先獲得,但是在真實系統中,情況並非如此。是的,我可以負擔重新繪製擴展數據集,因爲我將保持最大的窗口。您是否建議爲每個傳入數據點創建一個新的Dot對象(或任何繪圖對象),而不是更新DataSource對象?如果是這樣的話,我會試一試......謝謝 –