Please see below the code that I am using. My Goal is to keep the “Circular Axis” created in # Create Circular Axis section as the background. Then stream live data on top of that.
import numpy as np
import pandas as pd
from bokeh.plotting import figure
from bokeh.io import curdoc
from bokeh.models import ColumnDataSource
width = 820
height = 820
inner_radius = 50
outer_radiuss = 400
start_angle=0
end_angle=0.5*np.pi
angles = np.linspace(0,350,36)
p = figure(plot_width=width, plot_height=height, title=“”,
x_axis_type=None, y_axis_type=None,
x_range=(-450, 450), y_range=(-450, 450),
min_border=0, outline_line_color=“black”,background_fill_color=“#f0e1d2”)
radii=np.linspace(inner_radius,outer_radiuss,10)
xr = (radii[-1]+10)*np.cos(np.array(np.deg2rad(angles)))
yr = (radii[-1]+5)*np.sin(np.array(np.deg2rad(angles)))
Create Circular Axis
p.circle(0,0,radius=radii, fill_color=None, line_color=“white”)
p.annular_wedge(0,0,0,outer_radiuss,angles,angles,start_angle_units=‘deg’,end_angle_units=‘deg’,line_color=‘gray’,line_dash=‘dotted’)
p.text(xr, yr, angles, 0, text_font_size=“8pt”, text_align=“center”, text_baseline=“middle”)
···
create columndatasource
source=ColumnDataSource(dict(m1=,ang1=,m2=,ang2=))
df=pd.read_csv(r’C:\Users\golesh\AnacondaProjects\phasor_data.csv’)
df[‘x’]=df[‘magnitude’]outer_radiussnp.cos(np.deg2rad(df[‘angle’]))
df[‘y’]=df[‘magnitude’]outer_radiussnp.sin(np.deg2rad(df[‘angle’]))
create live phasors streamed from CSV
p.annular_wedge(0,0,0,outer_radius=‘m1’,start_angle=‘ang1’,end_angle=‘ang1’,start_angle_units=‘deg’,end_angle_units=‘deg’,line_color=‘black’,source=source, level=‘overlay’)
p.annular_wedge(0,0,0,outer_radius=‘m2’,start_angle=‘ang2’,end_angle=‘ang2’,start_angle_units=‘deg’,end_angle_units=‘deg’,line_color=‘red’,source=source, level=‘overlay’)
counter=0
def update():
global counter
new_data=dict(m1=df[‘magnitude’][counter:counter+1]*outer_radiuss,ang1=df[‘angle’][counter:counter+1],
m2=df[‘magnitude’][counter+1:counter+2]*outer_radiuss,ang2=df[‘angle’][counter+1:counter+2])
print(new_data)
source.stream(new_data,rollover=1)
counter +=1
print(source.data)
if counter==20:
counter=0
print(counter)
for i in range(0,len(df[‘x’])):
df[‘x’][i]=df[‘x’][20]+3.14*(i)
curdoc().add_periodic_callback(update,100) #100 ms
curdoc().add_root(p)
On Monday, May 14, 2018 at 3:56:01 PM UTC-4, [email protected] wrote:
Hi all,
I am trying to create polar chart( or phasor diagram) in Bokeh and show real time phasor results.
I need to create circular axis that will remain unchanged, and then stream the realtime data on top of that.
Can you please guide me how to create static graph as the axis? If I put everything in update function it becomes very slow and buggy.