2015-06-23 60 views
2

我目前正在使用通過服務器進行散景繪圖的這個簡單項目,嘗試將圓圈移動一圈。這兩個例子,我一直在努力學習的榜樣是https://github.com/bokeh/bokeh/blob/master/examples/plotting/server/animated.pyhttps://github.com/bokeh/bokeh/blob/master/examples/plotting/server/line_animate.py如何使用散景創建一個圓圈動畫

由於他們的文檔仍然是非常有限的,如果有人可以幫助,那將是巨大的。

import time 
import numpy as np 
from bokeh.plotting import cursession, figure, show, output_server 


output_server("circle_server") 

pl = figure(y_range=(-2,2), x_range=(-2,2)) 

x=1 
y=0 

pl.circle(x, y, size=25, alpha=0.6, name="moving_circle") 
pl.annulus(x=0,y=0, inner_radius = 1, outer_radius = 1, line_alpha=0.6) 


show(pl) 

renderer = pl.select(dict(name="moving_circle")) 
ds = renderer[0].data_source 



while True: 
    for rad in np.linspace(0,2*np.pi,100): 
     #rad = deg*np.pi/180 
     ds.data["x"] = np.cos(rad) 
     ds.data["y"] = np.sin(rad) 
     cursession().store_objects(ds) 
     time.sleep(0.1) 

回答

1

從這裏文檔:

http://bokeh.pydata.org/en/latest/docs/reference/plotting.html#bokeh.plotting.Figure.circle

圈(圖,* ARGS,** kwargs) - 參數:

  • X(STR或列表[浮動] ) - 中心x座標值或字段名稱

  • y(str或list [float]) - 中心y座標的值或字段名稱

因此,您需要將值傳遞給列表。要修復它,您可以在[x],[y],[np.cos(rad)]和[np.sin(rad)]中添加括號。

這裏的測試工作液:

import time 
import numpy as np 
from bokeh.plotting import cursession, figure, show, output_server 


output_server("circle_server") 

pl = figure(y_range=(-2,2), x_range=(-2,2)) 

x=1 
y=0 


pl.circle(x=[x], y=[y], size=25, alpha=0.6, name="circle") 
pl.annulus(x=0,y=0, inner_radius = 1, outer_radius = 1, line_alpha=0.6) 


show(pl) 

renderer = pl.select(dict(name="circle")) 

ds = renderer[0].data_source 

while True: 
    for rad in np.linspace(0,2*np.pi,100): 
     #rad = deg*np.pi/180 
     ds.data["x"] = [np.cos(rad)] 
     ds.data["y"] = [np.sin(rad)] 
     cursession().store_objects(ds) 
     time.sleep(0.5) 
+0

'cursession'不再工作了。 – lincolnfrias

2

以供將來參考cursession已經過時,而且作爲討論here一個應該遷移到bokeh.session

帶有動畫的(環形楔子)示例可以在here找到。

# You must first run "bokeh serve" to view this example 

from numpy import pi, cos, sin, linspace, roll 

from bokeh.client import push_session 
from bokeh.io import curdoc 
from bokeh.plotting import figure 

M = 5 
N = M*10 + 1 
r_base = 8 
theta = linspace(0, 2*pi, N) 
r_x = linspace(0, 6*pi, N-1) 
rmin = r_base - cos(r_x) - 1 
rmax = r_base + sin(r_x) + 1 

colors = ["FFFFCC", "#C7E9B4", "#7FCDBB", "#41B6C4", "#2C7FB8", "#253494", "#2C7FB8", "#41B6C4", "#7FCDBB", "#C7E9B4"] * M 

# figure() function auto-adds the figure to curdoc() 
p = figure(x_range=(-11, 11), y_range=(-11, 11)) 
r = p.annular_wedge(0, 0, rmin, rmax, theta[:-1], theta[1:], 
       fill_color=colors, line_color="white") 

# open a session to keep our local document in sync with server 
session = push_session(curdoc()) 

ds = r.data_source 

def update(): 
    rmin = roll(ds.data["inner_radius"], 1) 
    rmax = roll(ds.data["outer_radius"], -1) 
    ds.data.update(inner_radius=rmin, outer_radius=rmax) 

curdoc().add_periodic_callback(update, 30) 

session.show(p) # open the document in a browser 

session.loop_until_closed() # run forever