def mass_plotting(self, filename): data_dict = self.data_generation(filename) self.data_test(data_dict) name_check = data_dict["gen_info"]["DATA FILES"] attr_id = name_check[1][4][:-3] + "_" + name_check[2][2] TOOLS="pan,wheel_zoom,box_zoom,reset, hover, previewsave" figure_obj = figure(plot_width = 1000, plot_height = 800, y_axis_type = "log", title = attr_id, tools = TOOLS) figure_obj.yaxis.axis_label = data_dict["data"][0]["y_unit"] figure_obj.xaxis.axis_label = data_dict["data"][0]["x_unit"] hover = figure_obj.select(dict(type = HoverTool)) hover.tooltips=[("Value:", "$top")] hist, edges = np.histogram(data_dict["data"][0]["y"], bins = data_dict["data"][0]["x"]) source = ColumnDataSource(data = dict(top = hist, left = edges[:-1], right = edges[1:], x_unit = data_dict["data"][0]["x_unit"], y_unit = data_dict["data"][0]["y_unit"], edges = edges)) #hist = figure_obj.Histogram(source ) figure_obj.quad(top = "top", bottom = 0, left = "left" , right = "right", source = source) matplot_button = Button(label = "create matplotlib plot") matplot_button.on_click(lambda source_list = source: self.matplotlib_export_ms(source_list)) return Panel(child = hplot(figure_obj, matplot_button), title = attr_id)
def knit_html(self,es): #col1 fig1 = figure(width=250,height=250) vis_bokeh.draw_1d_hist_from_es("dummy1",0,35,30,es,"run*",ax=fig1) #changes fig1, but also returns it fig2=figure(width=250,height=250) xmin,xmax = 0,65 xbins = 20 xname = "hcalEnergy" ymin,ymax = 0,65 ybins = 20 yname = "muonHits" vis_bokeh.draw_2d_hist_from_es(xname,xmin,xmax,xbins,yname,ymin,ymax,ybins,es, index="run*",ax=fig2) fig_column1 = vplot(fig1,fig2) #col2 fig3 = figure(width=250,height=250) fig3=vis_bokeh.draw_1d_hist_from_es("dummy23",0,100,30,es,"run*",ax=fig3,hist_drawer="classic") fig4 = figure(width=250,height=250) fig4=vis_bokeh.draw_1d_hist_from_es("dummy45",0,40,30,es,"run*",ax=fig4) fig_column2 = vplot(fig3,fig4) fig_grid = hplot(fig_column1,fig_column2) return vis_bokeh.fig_to_html(fig_grid)
def bokeh_subplot(x, y, title, xlabel, ylabel): bk.plotting.output_file("subplot_data.html") s1 = bk.plotting.figure(title=title[0], x_axis_label=xlabel[0], y_axis_label=ylabel[0]) s1.circle(x[0], y[0], size=5, color='firebrick', alpha=0.5) s1.line(x[1], y[1], alpha=0.5, line_width=2, line_dash="dashed") s2 = bk.plotting.figure(title=title[1], x_axis_label=xlabel[1], y_axis_label=ylabel[1]) s2.circle(x[1], y[1], size=5, color='olive', alpha=0.5) s2.patch(x[1], y[1], alpha=0.5, line_width=2) p = hplot(s1, s2) bk.plotting.show(p)
def main(): # list all plots # put in a selector by name # when selected, load that module # join output of that module to curdoc() print(sys.path[:3]) import gliderops import gliderops.plots print(dir(gliderops.plots)) import gliderops.plots.plot_timeseries as plot_timeseries plot_this = plot_timeseries.plot() master_layout = hplot(plot_this) curdoc().add_root(master_layout)
def knit_html(self,es): figs = [] for i in range(len(self.hists)): figs.append( [self.make_figure(hist,model,es,"run*") for hist,model in zip(self.hists[i],self.models[i])] ) hrows = [hplot(*row) for row in figs] grid = vplot(*hrows) return vis_bokeh.fig_to_html(grid)
def init_bokeh_table(self): time_format = bokeh_tables.NumberFormatter(format='0,0.00000') name_template = ('<a id="function<%= ids %>", style="cursor:pointer">' '<%- names %></a>') name_format = (bokeh_tables. HTMLTemplateFormatter(template=name_template)) time_plot_template = ('<svg width="100" height="10">' '<rect width="<%= plot_inline_times%>"' 'height="10" style="fill:rgb(255, 0, 0);"/>' '<rect x="<%= plot_inline_times%>"' 'width="<%= plot_extra_times %>"' 'height="10" style="fill:rgb(255, 160, 160);"/>' '</svg>') time_plot_format = (bokeh_tables. HTMLTemplateFormatter(template=time_plot_template)) columns = [bokeh_tables.TableColumn(title="Function", field="names", formatter=name_format), bokeh_tables.TableColumn(title="Total time (s)", field="times", formatter=time_format, default_sort="descending"), bokeh_tables.TableColumn(title="Inline time (s)", field="inlinetimes", formatter=time_format, default_sort="descending"), bokeh_tables.TableColumn(title="Time plot", sortable=False, formatter=time_plot_format)] bokeh_table = bokeh_tables.DataTable(source=self.table_data, columns=columns, # Would be nice if width could # be automatic but this appears # to be broken in firefox and # chrome. width=620, height=27 + 15 * 25, selectable=False, row_headers=False) self.bokeh_table = bokeh_table comms_target = bokeh_util.serialization.make_id() self.bokeh_comms_target = comms_target self.bokeh_table_div = notebook_div(hplot(bokeh_table), comms_target)
def _init_plot(self): # get recoating data query = "SELECT MAX(ReplacementDate) AS ReplacementDate, SegmentPosition" \ " FROM MirrorRecoating" \ " GROUP BY SegmentPosition ORDER BY ReplacementDate, SegmentPosition" df = pd.read_sql(query, db.engine) # add missing segment positions missing_positions = [p for p in range(1, 92) if p not in df.SegmentPosition.values] df_missing = pd.DataFrame(dict(SegmentPosition=missing_positions, ReplacementDate=len(missing_positions) * [datetime.date(1970, 1, 1)])) df = df.append(df_missing, ignore_index=True) # sort by date (in descending order) df.sort_values(by='ReplacementDate', ascending=False, inplace=True) # add cumulative number of replacements since one recoating period ago start = self.now - datetime.timedelta(self.RECOATING_PERIOD) recoatings = len(df[df.ReplacementDate >= start]) df['RecoatingsSinceYearStart'] = [max(recoatings - i, 0) for i in range(0, 91)] # add days since recoating df['DaysSinceReplacement'] = [(self.now - d).days for d in df.ReplacementDate.values] # add segment position coordinates df['SegmentPositionX'] = [self.mirror_positions[m][0] for m in df.SegmentPosition] df['SegmentPositionY'] = [self.mirror_positions[m][1] for m in df.SegmentPosition] df['SegmentPositionCornerXs'] = [self._segment_corners(m)[0] for m in df.SegmentPosition] df['SegmentPositionCornerYs'] = [self._segment_corners(m)[1] for m in df.SegmentPosition] # create data source source = ColumnDataSource(df) table = self._table(source) replacement_plot = self._replacement_plot(source) segment_plot = self._segment_plot(source) srp = vplot(replacement_plot, segment_plot) self.plot = hplot(table, srp)
def plot_table_by_time(table): plots = [] table = table.set_index('time') for col in table: s = table[col] s.dropna(inplace=True) if not np.isscalar(s.values[0]): # replace with the sum s = s.apply(np.sum) x_range = plots[0].x_range if plots else None fig = figure(title=col, x_axis_type='datetime', x_range=x_range) fig.line(s.index, s, line_width=2) fig.circle(s.index, s, fill_color='white', size=8) plots.append(fig) ncols = int(np.ceil(np.sqrt(len(plots)))) nrows = int(np.ceil(len(plots) / ncols)) rows = [hplot(*plots[row*ncols:(row+1)*ncols]) for row in range(nrows)] plot = vplot(*rows) print('plot = %s' % plot) script, div = components(plot) return {'plot_div': div, 'plot_resources': PLOT_RESOURCES, 'plot_script': script, 'bokeh_version': bokeh.__version__}
data['x'] = []; data['y'] = []; } else { if (mode == 'Linear') { interp = linear; } else if (mode == 'Step (before)') { interp = step; step.set('mode', 'before'); } else if (mode == 'Step (center)') { interp = step; step.set('mode', 'center'); } else if (mode == 'Step (after)') { interp = step; step.set('mode', 'after'); } for (i=0; i < %d; i++) { data['x'][i] = i * dx data['y'][i] = interp.compute(data['x'][i]) } } source.trigger('change') """ % (N, N)) mode = Select(title='Interpolation Mode', value='None', options=[ 'None', 'Linear', 'Step (before)', 'Step (center)', 'Step (after)' ], callback=callback) output_file("transform_interpolator.html", title="Example Transforms") show(vplot(hplot(mode), p))
def nb_view_patches(Yr, A, C, b, f, d1, d2, image_neurons=None, thr=0.99): ''' Interactive plotting utility for ipython notbook Parameters ----------- Yr: np.ndarray movie A,C,b,f: np.ndarrays outputs of matrix factorization algorithm d1,d2: floats dimensions of movie (x and y) image_neurons: np.ndarray image to be overlaid to neurons (for instance the average) thr: double threshold regulating the extent of the displayed patches ''' colormap = cm.get_cmap("jet") # choose any matplotlib colormap here grayp = [mpl.colors.rgb2hex(m) for m in colormap(np.arange(colormap.N))] nr, T = C.shape nA2 = np.sum(np.array(A)**2, axis=0) b = np.squeeze(b) f = np.squeeze(f) #Y_r = np.array(spdiags(1/nA2,0,nr,nr)*(A.T*np.matrix(Yr-b[:,np.newaxis]*f[np.newaxis] - A.dot(C))) + C) Y_r = np.array(spdiags(1 / nA2, 0, nr, nr) * (A.T * np.matrix(Yr) - (A.T * np.matrix(b[:, np.newaxis])) * np.matrix(f[np.newaxis]) - (A.T.dot(A)) * np.matrix(C)) + C) bpl.output_notebook() x = np.arange(T) z = np.squeeze(np.array(Y_r[:, :].T)) / 100 k = np.reshape(np.array(A), (d1, d2, A.shape[1]), order='F') if image_neurons is None: image_neurons = np.nanmean(k, axis=2) fig = plt.figure() coors = plot_contours(coo_matrix(A), image_neurons, thr=thr) plt.close() # cc=coors[0]['coordinates']; cc1 = [cor['coordinates'][:, 0] for cor in coors] cc2 = [cor['coordinates'][:, 1] for cor in coors] c1 = cc1[0] c2 = cc2[0] npoints = range(len(c1)) source = ColumnDataSource(data=dict(x=x, y=z[:, 0], z=z)) source2 = ColumnDataSource(data=dict(x=npoints, c1=c1, c2=c2, cc1=cc1, cc2=cc2)) plot = bpl.figure(plot_width=600, plot_height=300) plot.line('x', 'y', source=source, line_width=1, line_alpha=0.6) callback = CustomJS(args=dict(source=source, source2=source2), code=""" var data = source.get('data'); var f = cb_obj.get('value')-1 x = data['x'] y = data['y'] z = data['z'] for (i = 0; i < x.length; i++) { y[i] = z[i][f] } var data2 = source2.get('data'); c1 = data2['c1']; c2 = data2['c2']; cc1 = data2['cc1']; cc2 = data2['cc2']; for (i = 0; i < c1.length; i++) { c1[i] = cc1[f][i] c2[i] = cc2[f][i] } source2.trigger('change'); source.trigger('change'); """) slider = bokeh.models.Slider(start=1, end=Y_r.shape[ 0], value=1, step=1, title="Neuron Number", callback=callback) xr = Range1d(start=0, end=image_neurons.shape[1]) yr = Range1d(start=image_neurons.shape[0], end=0) plot1 = bpl.figure(x_range=xr, y_range=yr, plot_width=300, plot_height=300) plot1.image(image=[image_neurons[::-1, :]], x=0, y=image_neurons.shape[0], dw=d2, dh=d1, palette=grayp) plot1.patch('c1', 'c2', alpha=0.6, color='purple', line_width=2, source=source2) layout = vform(slider, hplot(plot1, plot)) bpl.show(layout) return Y_r
def plotHistogram(fileName, initData, stations, dateRange, bokehPlaceholderId='bokehContent'): data = { 'xs': [initData['bins']], 'ys': [initData['values']], 'ss': [1, 2], 'es': [3, 4] } #ss and es are for test purposes we'll add other values of the controlles e.g. age, usertype, Gender coming fetshed from initdata source = ColumnDataSource(data=data) stations.insert(0, "All") selectSS = Select(title="Start Station:", value="All", options=stations) selectES = Select(title="End Station:", value="All", options=stations) selectUT = Select(title="User Type:", value="All", options=["All", "Subscriber", "Customer"]) selectGender = Select(title="Gender:", value="All", options=["All", "Male", "Female"]) sliderAge = Slider(start=8, end=100, value=30, step=5, title="Age") startDP = DatePicker(title="Start Date:", min_date=dateRange[0], max_date=dateRange[1], value=dateRange[0]) endDP = DatePicker(title="End Date:", min_date=dateRange[0], max_date=dateRange[1], value=dateRange[1]) binSize = TextInput(value="15", title="Bin Size (Days):") AddButton = Toggle(label="Add", type="success") DeleteButton = Toggle(label="delete", type="success") columns = [ TableColumn(field="ss", title="Start Station"), TableColumn(field="es", title="End Station") ] # add other columns contains values of other controllers data_table = DataTable(source=source, columns=columns, width=650, height=300) model = dict(source=source, selectSS=selectSS, selectES=selectES, startDP=startDP, endDP=endDP, binSize=binSize, selectUT=selectUT, selectGender=selectGender, sliderAge=sliderAge) plot = Figure(plot_width=650, plot_height=400, x_axis_type="datetime") plot.multi_line('xs', 'ys', source=source, line_width='width', line_alpha=0.6, line_color='color') callback = CustomJS(args=model, code=""" //alert("callback"); var startStation = selectSS.get('value'); var endStation = selectES.get('value'); var startDate = startDP.get('value'); if ( typeof(startDate) !== "number") startDate = startDate.getTime(); var endDate = endDP.get('value'); if ( typeof(endDate) !== "number") endDate = endDate.getTime(); var binSize = binSize.get('value'); //alert(startStation + " " + endStation + " " + startDate + " " + endDate + " " + binSize); var xmlhttp; xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == XMLHttpRequest.DONE ) { if(xmlhttp.status == 200){ var data = source.get('data'); var result = JSON.parse(xmlhttp.responseText); var temp=[]; for(var date in result.x) { temp.push(new Date(result.x[date])); } data['xs'].push(temp); data['ys'].push(result.y); source.trigger('change'); } else if(xmlhttp.status == 400) { alert(400); } else { alert(xmlhttp.status); } } }; var params = {ss:startStation, es:endStation, sd:startDate, ed:endDate, bs: binSize}; url = "/histogram?" + jQuery.param( params ); xmlhttp.open("GET", url, true); xmlhttp.send(); """) AddButton.callback = callback #DeleteButton.on_click(callback1) layout1 = vform(startDP, endDP, binSize) layout2 = vform(plot, DeleteButton, data_table) layout3 = vform(selectSS, selectES, selectUT, selectGender, sliderAge, AddButton) layout = hplot(layout1, layout2, layout3) script, div = components(layout) html = readHtmlFile(fileName) html = insertScriptIntoHeader(html, script) html = appendElementContent(html, div, "div", "bokehContent") return html
plot_width=400,plot_height=400, x_range=[0,10], y_range=[0,10]) filterPlot.image(image=[customFilter],x=[0],y=[0],dw=[10],dh=[10],palette="Spectral11")#,palette=myColorMapperAu.palette) filterPlot.axis.visible=None outputPlot=Figure(title="filtered image", plot_width=400,plot_height=400, x_range=[0,10], y_range=[0,10]) outputPlot.image(image=[realFilteredImage],x=[0],y=[0],dw=[10],dh=[10])#,palette=myColorMapperGrey.palette) outputPlot.axis.visible=None #http://bokeh.pydata.org/en/0.10.0/docs/user_guide/layout.html #p=gridplot([ [inputPlot,inputFFTPlot], [filterPlot,outputPlot] ]) #p=gridplot([ [inputPlot,None], [filterPlot,None] ]) p=hplot(inputPlot,filterPlot,outputPlot) #p=hplot(inputPlot,filterPlot) #set up the slider widgets #text = TextInput(title="title", value="Put your title here") spatialFreq = Slider(title="Spatial Frequency (cycles/image)", value=1.0, start=0.0, end=10.0) bandwidthSF = Slider(title ="spatial frequency bandwidth",value=1.0,start=0.1,end=5.0) orientation = Slider(title="Orientation (deg)", value=45.0, start=0.0, end =360.0) bandwidthOri = Slider(title ="orientation bandwidth",value=1.0,start=0.1,end=5.0) inputs = VBoxForm(children=[spatialFreq,bandwidthSF,orientation,bandwidthOri]) #set up callbacks #one for each input (text, sf, ori) #define the action mechanism #def updateText(attrname, old, new):
def plot(): fig = Figure(title='Timeseries', x_axis_type='datetime', tools = TOOLS, plot_width = 800) timeticks = DatetimeTickFormatter(formats=dict(seconds =["%b%d %H:%M:%S"], minutes =["%b%d %H:%M"], hours =["%b%d %H:%M"], days =["%b%d %H:%M"], months=["%b%d %H:%M"], years =["%b%d %H:%M %Y"])) fig.xaxis.formatter = timeticks platformIDs = get_glidernames() select_platformID = Select(title = 'PlatformID', value = platformIDs[0], options = platformIDs) select_sensor = Select(title = 'Sensors', value = 'm_depth', options = get_sensornames(platformIDs[0])) select_chunkation = Select(title = 'Chunkation', value = 'file', options = ['24hr', 'file']) button_prev_chunk = Button(label = '<') label_chunk_index = TextInput(value = '0') button_next_chunk = Button(label = '>') hbox_chunk = HBox(button_prev_chunk, label_chunk_index, button_next_chunk) #TODO log this as a bokeh bug hbox_chunk = HBox(label_chunk_index) onclick_controls = [button_prev_chunk, button_next_chunk] onchange_controls = [select_platformID,select_sensor, select_chunkation]#, label_chunk_index] source = ColumnDataSource(data=dict(x=[], y=[])) fig.line('x', 'y', source=source ) fig.circle('x', 'y', source=source, alpha = 0.2) def update_plot(attrib, old, new): sensorname = select_sensor.value print('UPDATE!') if attrib == 'button_click': chunk_index = button_next_chunk.clicks - button_prev_chunk.clicks label_chunk_index.value = str( chunk_index ) else: chunk_index = int(label_chunk_index.value) button_prev_chunk.clicks = 0 button_next_chunk.clicks = chunk_index try: sensor = mongoman.mongo_fetch(util.DB, select_platformID.value, {'name':sensorname})[0] except IndexError: print('{} does not exist for {} in this range'.format(sensorname, select_platformID.value)) return except Exception as e: print(e) return #sensor = Sensor(sensorname,'arbit',[(0,0),(1,1),(2,2),(3,3)],'noparse',['fake']) select_sensor.options = get_sensornames(select_platformID.value) x,y = sensor.xylist() times = [s*10**3 for s in x] #seconds to milliseconds source.data = dict(x=times, y=y) if select_chunkation.value == 'file': tstart,tend,chunk_ID = truncate_filechunk(chunk_index, select_platformID.value) elif select_chunkation.value == '24hr': hr = 86400 c = abs(chunk_index) t = util.time() tstart = t-(c+1)*hr tend = t-c*hr chunk_ID = '{} {} {}'.format(select_platformID.value, util.e2ts(min(x)), sensorname) else: tstart, tend = None,None fig.x_range.start = tstart*1000 fig.x_range.end = tend*1000 #converts to s to ms fig.yaxis.axis_label = '{} ({})'.format(sensorname,sensor.units) if sensorname == 'm_depth': fig.y_range.start = 1000 fig.y_range.end = 0 else: fig.y_range.start = None fig.y_range.end = None fig.title = '{} {} '.format(chunk_ID, sensorname) def button_callback(): update_plot('button_click',None,None) for val in onchange_controls: val.on_change('value',update_plot) for val in onclick_controls: val.on_click(button_callback) control_box = vform(*onchange_controls, hbox_chunk) layout = vplot( hplot(fig, button_prev_chunk, button_next_chunk, control_box ), TextInput()) return layout
row2, col2 = dem_map.convertToRowCol(utm2) print(row2,col2) from bokeh.plotting import figure, output_file, show from bokeh.io import hplot output_file("lines.html", title="line plot example") dh, dw = dem_map.elevations.shape print dw,dh # create a new plot with a title and axis labels s1 = figure(title="simple line example", x_axis_label='x', y_axis_label='y', x_range=[0, 250], y_range=[250, 500]) s2 = figure(title="simple line example", x_axis_label='x', y_axis_label='y', x_range=[0, 250], y_range=[250, 500]) # add a line renderer with legend and line thickness s1.image(image=[dem_map.elevations[::-1,:]], dw=dw, dh=dh, palette="Spectral11") s2.image(image=[dem_map.obstacles[::-1,:]], dw=dw, dh=dh) # show the results final = P.aStarCompletePath([0, 0, 1], [ap1, ap2], 'tuple', [s1, s2], dh) if len(final)>0: for elt in final[0]: s1.circle(elt[1], dh - elt[0], fill_color="yellow", line_color="yellow") s2.circle(elt[1], dh-elt[0], fill_color="yellow", line_color="yellow") s1.circle([col1, col2], [dh - row1, dh - row2], fill_color="orange", line_color="orange") s2.circle([col1, col2], [dh - row1, dh - row2], fill_color="orange", line_color="orange") print final p = hplot(s1, s2) show(p)
from bokeh.models.widgets import Button from bokeh.client import push_session from bokeh.plotting import figure, curdoc from bokeh.io import vform, hplot figure_obj = figure() button = Button(label="this thing") hplot(figure_obj, button) session = push_session(curdoc()) session.show() session.loop_until_closed()
from bokeh.models import HoverTool from bokeh.models import ColumnDataSource from bokeh.models.widgets import DataTable, DateFormatter, TableColumn from bokeh.io import output_file, show, vform, vplot, hplot from assocplots.misc import mock_data_generation data_m = np.genfromtxt('HIP_MEN_chr_pos_rs_pval.txt', dtype=None, names=['chr', 'pos', 'snp', 'pval']) data_w = np.genfromtxt('HIP_WOMEN_chr_pos_rs_pval.txt', dtype=None, names=['chr', 'pos', 'snp', 'pval']) # data_m, data_w = mock_data_generation(M=100000, seed=42) # data_m['pval'] /= 500000.*np.exp(-(data_m['pos']-10000.)**2/50000.0) * (data_m['chr']=='4') * np.random.rand(len(data_m)) + 1. from assocplots.interactive import * # cut1, cut2, data = data_reduce(data_m, data_w, N=5000) cut1, cut2, data = data_reduce_fast(data_m, data_w, N=1000) p1,p2,p3,p4,pq1 = mann_only_interactive(data, cut1, cut2) show(vplot(p1,p2)) show(hplot(pq1,p4)) show(p4) from assocplots.htmloutput import * write_to_html([p1,p2,pq1,p4], filename='output.html', title='Title')
def plotHistogram(fileName, initData, stations, dateRange, bokehPlaceholderId='bokehContent'): data = {'xs':[initData['bins']], 'ys':[initData['values']],'ss':[1,2], 'es':[3,4] }#ss and es are for test purposes we'll add other values of the controlles e.g. age, usertype, Gender coming fetshed from initdata source = ColumnDataSource(data=data) stations.insert(0, "All") selectSS = Select(title="Start Station:", value="All", options=stations) selectES = Select(title="End Station:", value="All", options=stations) selectUT = Select(title="User Type:", value="All", options=["All", "Subscriber", "Customer"]) selectGender = Select(title="Gender:", value="All", options=["All", "Male", "Female"]) sliderAge = Slider(start=8, end=100, value=30, step=5, title="Age") startDP = DatePicker(title="Start Date:", min_date=dateRange[0] ,max_date=dateRange[1], value=dateRange[0]) endDP = DatePicker(title="End Date:", min_date=dateRange[0] ,max_date=dateRange[1], value=dateRange[1]) binSize = TextInput(value="15", title="Bin Size (Days):") AddButton = Toggle(label="Add", type="success") DeleteButton = Toggle(label="delete", type="success") columns = [TableColumn(field="ss", title="Start Station"),TableColumn(field="es", title="End Station")]# add other columns contains values of other controllers data_table = DataTable(source=source, columns=columns, width=650, height=300) model = dict(source=source, selectSS = selectSS, selectES = selectES, startDP = startDP, endDP = endDP, binSize = binSize,selectUT=selectUT,selectGender=selectGender,sliderAge=sliderAge) plot = Figure(plot_width=650, plot_height=400, x_axis_type="datetime") plot.multi_line('xs', 'ys', source=source, line_width='width', line_alpha=0.6, line_color='color') callback = CustomJS(args=model, code=""" //alert("callback"); var startStation = selectSS.get('value'); var endStation = selectES.get('value'); var startDate = startDP.get('value'); if ( typeof(startDate) !== "number") startDate = startDate.getTime(); var endDate = endDP.get('value'); if ( typeof(endDate) !== "number") endDate = endDate.getTime(); var binSize = binSize.get('value'); //alert(startStation + " " + endStation + " " + startDate + " " + endDate + " " + binSize); var xmlhttp; xmlhttp = new XMLHttpRequest(); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == XMLHttpRequest.DONE ) { if(xmlhttp.status == 200){ var data = source.get('data'); var result = JSON.parse(xmlhttp.responseText); var temp=[]; for(var date in result.x) { temp.push(new Date(result.x[date])); } data['xs'].push(temp); data['ys'].push(result.y); source.trigger('change'); } else if(xmlhttp.status == 400) { alert(400); } else { alert(xmlhttp.status); } } }; var params = {ss:startStation, es:endStation, sd:startDate, ed:endDate, bs: binSize}; url = "/histogram?" + jQuery.param( params ); xmlhttp.open("GET", url, true); xmlhttp.send(); """) AddButton.callback = callback #DeleteButton.on_click(callback1) layout1 = vform (startDP,endDP,binSize) layout2 = vform(plot,DeleteButton,data_table) layout3 = vform(selectSS, selectES,selectUT,selectGender,sliderAge,AddButton) layout = hplot(layout1,layout2,layout3) script, div = components(layout) html = readHtmlFile(fileName) html = insertScriptIntoHeader(html, script) html = appendElementContent(html, div, "div", "bokehContent") return html
def plotting(self): #Tools = [hover, TapTool(), BoxZoomTool(), BoxSelectTool(), PreviewSaveTool(), ResetTool()] TOOLS = "crosshair,pan,wheel_zoom,box_zoom,reset,hover,previewsave" tab_plots = [] #output_file("test.html") self.all_elements = [] self.elements_comparison = [] for attr_id, i in zip(self.attribute_ids, range(len(self.attribute_ids))): """ create plots for each datafile and put them in a tab. """ list_of_datasets = getattr(self, attr_id) y_axis_units = [x["y_unit"] for x in list_of_datasets] x_axis_units = [x["x_unit"] for x in list_of_datasets] figure_obj = figure(plot_width=1000, plot_height=800, y_axis_type="log", title=attr_id, tools=TOOLS) #figure_obj.axes.major_label_text_font_size("12pt") #figure_obj.major_label_text_font_size("12pt") setattr(self, attr_id + "_" + "figure_obj", figure_obj) figure_obj.yaxis.axis_label = y_axis_units[0] figure_obj.xaxis.axis_label = x_axis_units[0] if not all(x == y_axis_units[0] for x in y_axis_units): for unit, data in zip(y_axis_units, list_of_datasets): if not unit == y_axis_units[0]: figure_obj.extra_y_ranges = { "foo": Range1d(start=np.amin(data["data"]["y"]), end=np.amax(data["data"]["y"])) } figure_obj.add_layout( LogAxis(y_range_name="foo", axis_label=unit), "right") break if not all(x == x_axis_units[0] for x in x_axis_units): for unit, data in zip(x_axis_units, list_of_datasets): if not unit == x_axis_units[0]: figure_obj.extra_x_ranges = { "bar": Range1d(start=np.amin(data["data"]["x"]), end=np.amax(data["data"]["x"])) } figure_obj.add_layout( LinearAxis(x_range_name="bar", axis_label=unit), "above") break figure_obj.xaxis.axis_label = list_of_datasets[0]["x_unit"] colour_list = Spectral11 + RdPu9 + Oranges9 colour_indices = [0, 2, 8, 10, 12, 14, 20, 22, 1, 3, 9, 11, 13, 15] list_of_elements = [] for dataset, color_index in zip(list_of_datasets, colour_indices): self.all_elements.append( dataset["sample element"]) #strip isotope number color = colour_list[color_index] source = ColumnDataSource( data=dataset["data"] ) #Datastructure for source of plotting setattr(self, attr_id + "_" + dataset["sample element"] + "_source", source) #Source element generalized for all plotting list_of_elements.append(dataset["sample element"]) figure_obj.line( "x", "y", source=getattr( self, attr_id + "_" + dataset["sample element"] + "_source"), line_width=2, line_color=color, legend=dataset["sample element"], name=dataset["sample element"], ) hover = figure_obj.select_one(HoverTool).tooltips = [ ("element", "@element"), ("(x,y)", "($x, $y)") ] radio_group = RadioGroup(labels=list_of_elements, active=0) """ Need to fetch default variables from input file and replace DEFAULT Block of code produces the layout of buttons and callbacks """ #Calculations on the dataset text_input_rsf = TextInput(value="default", title="RSF (at/cm^3): ") do_integral_button = Button(label="Calibration Integral") smoothing_button = Button(label="Smoothing on selected curve") text_input_sputter = TextInput(value="default", title="Sputter speed: float unit") text_input_crater_depth = TextInput( value="default", title="Depth of crater in: float") radio_group.on_change("active", lambda attr, old, new: None) text_input_xval_integral = TextInput( value="0", title="x-value for calibration integral ") text_input_yval_integral = TextInput( value="0", title="y-value for calibration integral ") #Save files for later use save_flexDPE_button = Button(label="Save element for FlexPDE") save_all_flexDPE_button = Button( label="Save all elements for FlexPDE") #Pointers to methods on click / change handlers do_integral_button.on_click( lambda identity=self.attribute_ids[i], radio=radio_group, x_box =text_input_xval_integral, y_box=text_input_yval_integral: self .integrate(identity, radio, x_box, y_box)) smoothing_button.on_click(lambda identity=self.attribute_ids[ i], radio=radio_group: self.smoothing(identity, radio)) save_flexDPE_button.on_click(lambda identity=self.attribute_ids[ i], radio=radio_group: self.write_to_flexPDE(identity, radio)) save_all_flexDPE_button.on_click( lambda identity=self.attribute_ids[i], radio=radio_group: self. write_all_to_flexPDE(identity, radio)) text_input_rsf.on_change( "value", lambda attr, old, new, radio=radio_group, identity=self. attribute_ids[i], text_input=text_input_rsf, which="rsf": self. update_data(identity, radio, text_input, new, which)) text_input_sputter.on_change( "value", lambda attr, old, new, radio=radio_group, identity=self. attribute_ids[i], text_input= text_input_sputter, which="sputter": self.update_data( identity, radio, text_input, new, which)) text_input_crater_depth.on_change( "value", lambda attr, old, new, radio=radio_group, identity=self. attribute_ids[i], text_input=text_input_crater_depth, which= "crater_depth": self.update_data(identity, radio, text_input, new, which)) #Initialization of actual plotting. tab_plots.append( Panel(child=hplot( figure_obj, vform(radio_group, save_flexDPE_button, save_all_flexDPE_button), vform(text_input_rsf, smoothing_button, text_input_sputter, text_input_crater_depth), vform(text_input_xval_integral, text_input_yval_integral, do_integral_button)), title=attr_id)) """ Check to see if one or more element exists in the samples and creat a comparison plot for each of those elements. """ for element in self.all_elements: checkers = list(self.all_elements) checkers.remove(element) if element in checkers and not element in self.elements_comparison: self.elements_comparison.append(element) """create plots for each element that is to be compared """ for comparison_element in self.elements_comparison: colour_list = Spectral11 + RdPu9 + Oranges9 colour_indices = [0, 2, 8, 10, 12, 14, 20, 22, 1, 3, 9, 11, 13, 15] figure_obj = figure(plot_width=1000, plot_height=800, y_axis_type="log", title=comparison_element, tools=TOOLS) #figure_obj.xaxis.major_label_text_font_size("12pt") #figure_obj.yaxis.major_label_text_font_size("12pt") y_axis_units = [] x_axis_units = [] comparison_datasets = [] for attr_id, color_index in zip(self.attribute_ids, colour_indices): list_of_datasets = getattr(self, attr_id) for dataset in list_of_datasets: if dataset["sample element"] == comparison_element: comparison_datasets.append(dataset) y_axis_units.append(dataset["y_unit"]) x_axis_units.append(dataset["x_unit"]) figure_obj.xaxis.axis_label = comparison_datasets[-1]["x_unit"] figure_obj.yaxis.axis_label = comparison_datasets[-1]["y_unit"] if not all(x == y_axis_units[-1] for x in y_axis_units): for unit, data in zip(y_axis_units, comparison_datasets): if not unit == y_axis_units[-1]: figure_obj.extra_y_ranges = { "foo": Range1d(start=np.amin(data["data"]["y"]), end=np.amax(data["data"]["y"])) } figure_obj.add_layout( LogAxis(y_range_name="foo", axis_label=unit), "right") break if not all(x == x_axis_units[-1] for x in x_axis_units): for unit, data in zip(x_axis_units, comparison_datasets): if not unit == x_axis_units[-1]: figure_obj.extra_x_ranges = { "bar": Range1d(start=np.amin(data["data"]["x"]), end=np.amax(data["data"]["x"])) } figure_obj.add_layout( LinearAxis(x_range_name="bar", axis_label=unit), "above") break for attr_id, color_index in zip(self.attribute_ids, colour_indices): list_of_datasets = getattr(self, attr_id) for dataset in list_of_datasets: if dataset["sample element"] == comparison_element: color = colour_list[color_index] """ Logic that ensures that plots get put with correspoinding axes. """ if dataset["x_unit"] != x_axis_units[-1] or dataset[ "y_unit"] != y_axis_units[-1]: if dataset["x_unit"] != x_axis_units[ -1] and dataset["y_unit"] != y_axis_units[ -1]: figure_obj.line( "x", "y", source=getattr( self, attr_id + "_" + dataset["sample element"] + "_source"), line_width=2, line_color=color, legend=attr_id, x_range_name="bar", y_range_name="foo") elif dataset["x_unit"] != x_axis_units[-1]: figure_obj.line( "x", "y", source=getattr( self, attr_id + "_" + dataset["sample element"] + "_source"), line_width=2, line_color=color, legend=attr_id, x_range_name="bar") else: figure_obj.line( "x", "y", source=getattr( self, attr_id + "_" + dataset["sample element"] + "_source"), line_width=2, line_color=color, legend=attr_id, y_range_name="foo") else: figure_obj.line( "x", "y", source=getattr( self, attr_id + "_" + dataset["sample element"] + "_source"), line_width=2, line_color=color, legend=attr_id) tab_plots.append(Panel(child=figure_obj, title=comparison_element)) tabs = Tabs(tabs=tab_plots) session = push_session(curdoc()) session.show() session.loop_until_closed()
from bokeh.models import HoverTool from bokeh.models import ColumnDataSource from bokeh.models.widgets import DataTable, DateFormatter, TableColumn from bokeh.io import output_file, show, vform, vplot, hplot from assocplots.misc import mock_data_generation data_m = np.genfromtxt('HIP_MEN_chr_pos_rs_pval.txt', dtype=None, names=['chr', 'pos', 'snp', 'pval']) data_w = np.genfromtxt('HIP_WOMEN_chr_pos_rs_pval.txt', dtype=None, names=['chr', 'pos', 'snp', 'pval']) # data_m, data_w = mock_data_generation(M=100000, seed=42) # data_m['pval'] /= 500000.*np.exp(-(data_m['pos']-10000.)**2/50000.0) * (data_m['chr']=='4') * np.random.rand(len(data_m)) + 1. from assocplots.interactive import * # cut1, cut2, data = data_reduce(data_m, data_w, N=5000) cut1, cut2, data = data_reduce_fast(data_m, data_w, N=1000) p1, p2, p3, p4, pq1 = mann_only_interactive(data, cut1, cut2) show(vplot(p1, p2)) show(hplot(pq1, p4)) show(p4) from assocplots.htmloutput import * write_to_html([p1, p2, pq1, p4], filename='output.html', title='Title')
def nb_view_patches3d(Yr, A, C, b, f, dims, image_type='mean', max_projection=False, axis=0, thr=0.99, denoised_color=None): ''' Interactive plotting utility for ipython notbook Parameters ----------- Yr: np.ndarray movie A,C,b,f: np.ndarrays outputs of matrix factorization algorithm dims: tuple of ints dimensions of movie (x, y and z) image_type: 'mean', 'max' or 'corr' image to be overlaid to neurons (average, maximum or nearest neigbor correlation) max_projection: boolean plot max projection along specified axis if True, plot layers if False axis: int (0, 1 or 2) axis along which max projection is performed or layers are shown thr: double threshold regulating the extent of the displayed patches denoised_color: string or None color name (e.g. 'red') or hex color code (e.g. '#F0027F') ''' d, T = Yr.shape order = list(range(4)) order.insert(0, order.pop(axis)) Yr = Yr.reshape(dims + (-1,), order='F').transpose(order).reshape((d, T), order='F') A = A.reshape(dims + (-1,), order='F').transpose(order).reshape((d, -1), order='F') dims = tuple(np.array(dims)[order[:3]]) d1, d2, d3 = dims colormap = cm.get_cmap("jet") # choose any matplotlib colormap here grayp = [mpl.colors.rgb2hex(m) for m in colormap(np.arange(colormap.N))] nr, T = C.shape nA2 = np.sum(np.array(A)**2, axis=0) b = np.squeeze(b) f = np.squeeze(f) Y_r = np.array(spdiags(old_div(1, nA2), 0, nr, nr) * (A.T * np.matrix(Yr) - (A.T * np.matrix(b[:, np.newaxis])) * np.matrix(f[np.newaxis]) - (A.T.dot(A)) * np.matrix(C)) + C) bpl.output_notebook() x = np.arange(T) z = old_div(np.squeeze(np.array(Y_r[:, :].T)), 100) k = np.reshape(np.array(A), dims + (A.shape[1],), order='F') source = ColumnDataSource(data=dict(x=x, y=z[:, 0], y2=old_div(C[0], 100), z=z, z2=old_div(C.T, 100))) if max_projection: if image_type == 'corr': image_neurons = [(local_correlations( Yr.reshape(dims + (-1,), order='F'))[:, ::-1]).max(i) for i in range(3)] elif image_type in ['mean', 'max']: tmp = [({'mean': np.nanmean, 'max': np.nanmax}[image_type] (k, axis=3)[:, ::-1]).max(i) for i in range(3)] else: raise ValueError("image_type must be 'mean', 'max' or 'corr'") # tmp = [np.nanmean(k.max(i), axis=2) for i in range(3)] image_neurons = np.nan * np.ones((int(1.05 * (d1 + d2)), int(1.05 * (d1 + d3)))) image_neurons[:d2, -d3:] = tmp[0][::-1] image_neurons[:d2, :d1] = tmp[2].T[::-1] image_neurons[-d1:, -d3:] = tmp[1] offset1 = image_neurons.shape[1] - d3 offset2 = image_neurons.shape[0] - d1 coors = [plot_contours(coo_matrix(A.reshape(dims + (-1,), order='F').max(i) .reshape((old_div(np.prod(dims), dims[i]), -1), order='F')), tmp[i], thr=thr) for i in range(3)] pl.close() cc1 = [[cor['coordinates'][:, 0] + offset1 for cor in coors[0]], [cor['coordinates'][:, 1] for cor in coors[2]], [cor['coordinates'][:, 0] + offset1 for cor in coors[1]]] cc2 = [[cor['coordinates'][:, 1] for cor in coors[0]], [cor['coordinates'][:, 0] for cor in coors[2]], [cor['coordinates'][:, 1] + offset2 for cor in coors[1]]] c1x = cc1[0][0] c2x = cc2[0][0] c1y = cc1[1][0] c2y = cc2[1][0] c1z = cc1[2][0] c2z = cc2[2][0] source2 = ColumnDataSource(data=dict( # x=npointsx, y=npointsy, z=npointsz, c1x=c1x, c1y=c1y, c1z=c1z, c2x=c2x, c2y=c2y, c2z=c2z, cc1=cc1, cc2=cc2)) callback = CustomJS(args=dict(source=source, source2=source2), code=""" var data = source.get('data'); var f = cb_obj.get('value')-1 y = data['y'] y2 = data['y2'] for (i = 0; i < y.length; i++) { y[i] = data['z'][i][f]; y2[i] = data['z2'][i][f]; } var data2 = source2.get('data'); c1x = data2['c1x']; c2x = data2['c2x']; c1y = data2['c1y']; c2y = data2['c2y']; c1z = data2['c1z']; c2z = data2['c2z']; cc1 = data2['cc1']; cc2 = data2['cc2']; for (i = 0; i < c1x.length; i++) { c1x[i] = cc1[0][f][i] c2x[i] = cc2[0][f][i] } for (i = 0; i < c1y.length; i++) { c1y[i] = cc1[1][f][i] c2y[i] = cc2[1][f][i] } for (i = 0; i < c1z.length; i++) { c1z[i] = cc1[2][f][i] c2z[i] = cc2[2][f][i] } source2.trigger('change'); source.trigger('change'); """) else: if image_type == 'corr': image_neurons = local_correlations(Yr.reshape(dims + (-1,), order='F'))[:, ::-1] elif image_type in ['mean', 'max']: image_neurons = {'mean': np.nanmean, 'max': np.nanmax}[image_type](k, axis=3)[:, ::-1] else: raise ValueError('image_type must be mean, max or corr') cmap = bokeh.models.mappers.LinearColorMapper([mpl.colors.rgb2hex(m) for m in colormap(np.arange(colormap.N))]) cmap.high = image_neurons.max() coors = get_contours3d(A, dims, thr=thr) pl.close() cc1 = [[l[:, 0] for l in n['coordinates']] for n in coors] cc2 = [[l[:, 1] for l in n['coordinates']] for n in coors] linit = int(round(coors[0]['CoM'][0])) # pick initl layer in which first neuron lies c1 = cc1[0][linit] c2 = cc2[0][linit] source2 = ColumnDataSource(data=dict(c1=c1, c2=c2, cc1=cc1, cc2=cc2)) x = list(range(d2)) y = list(range(d3)) source3 = ColumnDataSource( data=dict(im1=[image_neurons[linit]], im=image_neurons, xx=[x], yy=[y])) callback = CustomJS(args=dict(source=source, source2=source2), code=""" var data = source.get('data'); var f = slider_neuron.get('value')-1; var l = slider_layer.get('value')-1; y = data['y'] y2 = data['y2'] for (i = 0; i < y.length; i++) { y[i] = data['z'][i][f]; y2[i] = data['z2'][i][f]; } var data2 = source2.get('data'); c1 = data2['c1']; c2 = data2['c2']; for (i = 0; i < c1.length; i++) { c1[i] = data2['cc1'][f][l][i]; c2[i] = data2['cc2'][f][l][i]; } source2.trigger('change'); source.trigger('change'); """) callback_layer = CustomJS(args=dict(source=source3, source2=source2), code=""" var f = slider_neuron.get('value')-1; var l = slider_layer.get('value')-1; var im1 = source.get('data')['im1'][0]; for (var i = 0; i < source.get('data')['xx'][0].length; i++) { for (var j = 0; j < source.get('data')['yy'][0].length; j++){ im1[i][j] = source.get('data')['im'][l][i][j]; } } var data2 = source2.get('data'); c1 = data2['c1']; c2 = data2['c2']; for (i = 0; i < c1.length; i++) { c1[i] = data2['cc1'][f][l][i]; c2[i] = data2['cc2'][f][l][i]; } source.trigger('change'); source2.trigger('change'); """) plot = bpl.figure(plot_width=600, plot_height=300) plot.line('x', 'y', source=source, line_width=1, line_alpha=0.6) if denoised_color is not None: plot.line('x', 'y2', source=source, line_width=1, line_alpha=0.6, color=denoised_color) slider = bokeh.models.Slider(start=1, end=Y_r.shape[0], value=1, step=1, title="Neuron Number", callback=callback) xr = Range1d(start=0, end=image_neurons.shape[1] if max_projection else d3) yr = Range1d(start=image_neurons.shape[0] if max_projection else d2, end=0) plot1 = bpl.figure(x_range=xr, y_range=yr, plot_width=300, plot_height=300) if max_projection: plot1.image(image=[image_neurons[::-1, :]], x=0, y=image_neurons.shape[0], dw=image_neurons.shape[1], dh=image_neurons.shape[0], palette=grayp) plot1.patch('c1x', 'c2x', alpha=0.6, color='purple', line_width=2, source=source2) plot1.patch('c1y', 'c2y', alpha=0.6, color='purple', line_width=2, source=source2) plot1.patch('c1z', 'c2z', alpha=0.6, color='purple', line_width=2, source=source2) layout = vform(slider, hplot(plot1, plot)) else: slider_layer = bokeh.models.Slider(start=1, end=d1, value=linit + 1, step=1, title="Layer", callback=callback_layer) callback.args['slider_neuron'] = slider callback.args['slider_layer'] = slider_layer callback_layer.args['slider_neuron'] = slider callback_layer.args['slider_layer'] = slider_layer plot1.image(image='im1', x=[0], y=[d2], dw=[d3], dh=[d2], color_mapper=cmap, source=source3) plot1.patch('c1', 'c2', alpha=0.6, color='purple', line_width=2, source=source2) layout = vform(slider, slider_layer, hplot(plot1, plot)) bpl.show(layout) return Y_r
def nb_view_patches(Yr,A,C,b,f,d1,d2,image_neurons=None,thr = 0.99): colormap =cm.get_cmap("jet") #choose any matplotlib colormap here grayp = [mpl.colors.rgb2hex(m) for m in colormap(np.arange(colormap.N))] nr,T = C.shape nA2 = np.sum(np.array(A)**2,axis=0) Y_r = np.array(spdiags(1/nA2,0,nr,nr)*(A.T*np.matrix(Yr-b[:,np.newaxis]*f[np.newaxis] - A.dot(C))) + C) bpl.output_notebook() x = np.arange(T) z=np.squeeze(np.array(Y_r[:,:].T))/100 k=np.reshape(np.array(A),(d1,d2,A.shape[1]),order='F') if image_neurons is None: image_neurons=np.sum(k,axis=2) fig = plt.figure() coors = plot_contours(coo_matrix(A),image_neurons,thr = thr) plt.close() # cc=coors[0]['coordinates']; cc1=[cor['coordinates'][:,0] for cor in coors] cc2=[cor['coordinates'][:,1] for cor in coors] c1=cc1[0] c2=cc2[0] npoints=range(len(c1)) source = ColumnDataSource(data=dict(x=x, y=z[:,0], z=z)) source2 = ColumnDataSource(data=dict(x=npoints,c1=c1,c2=c2,cc1=cc1,cc2=cc2)) xr = Range1d(start=0,end=image_neurons.shape[1]) yr = Range1d(start=image_neurons.shape[0],end=0) plot = bpl.figure(plot_width=600, plot_height=300) plot.line('x', 'y', source=source, line_width=1, line_alpha=0.6) callback = CustomJS(args=dict(source=source,source2=source2), code=""" var data = source.get('data'); var f = cb_obj.get('value') x = data['x'] y = data['y'] z = data['z'] for (i = 0; i < x.length; i++) { y[i] = z[i][f-1] } var data2 = source2.get('data'); c1 = data2['c1']; c2 = data2['c2']; cc1 = data2['cc1']; cc2 = data2['cc2']; for (i = 0; i < c1.length; i++) { c1[i] = cc1[f][i] c2[i] = cc2[f][i] } source2.trigger('change'); source.trigger('change'); """) slider = Slider(start=1, end=Y_r.shape[0], value=1, step=1, title="Neuron Number", callback=callback) plot1 = bpl.figure(x_range=xr, y_range=yr,plot_width=300, plot_height=300) plot1.image(image=[image_neurons[::-1,:]], x=0, y=image_neurons.shape[0], dw=d2, dh=d1, palette=grayp) plot1.patch('c1','c2',alpha=0.6, color='red',line_width=2,source=source2) layout = vform(slider, hplot(plot1,plot)) bpl.show(layout) return Y_r
global layout global energy_per_capita new_df = data_changed(energy_per_capita) if new_df is not None: energy_per_capita = new_df plots_box.children[0] = create_line(energy_per_capita) plots_box.children[1] = create_bar(energy_per_capita) line = create_line(energy_per_capita) bar = create_bar(energy_per_capita) desc1 = Paragraph(text=""" This example shows live integration between bokeh server and Excel using XLWings.""") desc2 = Paragraph(text=""" *** YOU MUST HAVE EXCEL and XLWINGS INSTALLED ON YOUR MACHINE FOR IT TO WORK *** """) desc3 = Paragraph(text=""" It opens this plots window and an excel spreadsheet instance with the values being plotted. When user changes the values on the excel spreadsheet the plots will be updated accordingly. It's not required to save the spreadsheet for the plots to update. """) plots_box = hplot(line, bar) layout = vplot(desc1, desc2, desc3, plots_box) curdoc().add_root(layout) curdoc().add_periodic_callback(update, 500) session.show() # open the document in a browser session.loop_until_closed() # run forever
def build_app(list_cursor): '''function to build 2nd page Bokeh app with interactions''' #create a list of years for sample size years years = [str(i) for i in range(1992,2015,2)] years.insert(1,str(1993)); years.insert(3,str(1995)) #the odd ducks col_lab_sam = ['Sample Size - ' + i for i in years] #sample column labels col_lab_var = ['Variable Name - ' + i for i in years] #variable column labels col_lab_qtxt = ['Question Text - ' + i for i in years] #question text column labels col_lab_res = ['Response Options - ' + i for i in years] #response options column labels #to handle CAMS waves years_c = [str(i) for i in range(2001,2014,2)] col_lab_sam_c = ['Sample Size- ' + i + ' CAMS' for i in years_c] col_lab_var_c = ['Variable Name- ' + i + ' CAMS' for i in years_c] col_lab_qtxt_c = ['Question Text - ' + i + ' CAMS' for i in years_c] col_lab_res_c = ['Response Options - ' + i + ' CAMS' for i in years_c] #create results data table l_id = []; l_q = []; l_g = []; l_n = []; l_sample = [] l_var = []; l_qtext = []; l_res = []; l_cac = []; l_years = [] i = 1 for table_cursor in list_cursor: for doc in table_cursor: l_id.append(str(i)) i += 1 l_q.append(doc['Question Text - First Wave Available']) l_g.append(doc['Database Section']) l_n.append(doc['General Notes']) l_cac.append(doc['CAC Label']) if doc['Database Section'] != 'CAMS': l_sample.append([int(doc[lab]) if doc[lab] is not '' else 0 for lab in col_lab_sam]) l_var.append([doc[lab] for lab in col_lab_var]) l_qtext.append([doc[lab] for lab in col_lab_qtxt]) l_res.append([doc[lab] for lab in col_lab_res]) l_years.append(years) else: l_sample.append([int(doc[lab]) if doc[lab] is not '' else 0 for lab in col_lab_sam_c]) l_var.append([doc[lab] for lab in col_lab_var_c]) l_qtext.append([doc[lab] for lab in col_lab_qtxt_c]) l_res.append([doc[lab] for lab in col_lab_res_c]) l_years.append(years_c) table_source = ColumnDataSource(data=dict(_id = l_id, question = l_q, gray = l_g, notes = l_n, \ Sample = l_sample, var = l_var, qtext = l_qtext, res = l_res, \ cac = l_cac, years = l_years)) columns = [TableColumn(field = '_id', title = "ID", width=5),\ TableColumn(field = 'cac', title = 'CAC Label',width=70),\ TableColumn(field = 'gray', title = 'Sections',width=80),\ TableColumn(field = 'question', title = "Question Text",width =150),\ TableColumn(field = 'notes', title = "Notes",width = 50)] data_table = DataTable(source=table_source, columns=columns, selectable = True, fit_columns = True) #create selected item table data (only display after callback) table_source_2 = ColumnDataSource(data=dict(years = years, var = ['na']*len(years),\ qtext = ['na']*len(years), res = ['na']*len(years))) columns_2 = [TableColumn(field = 'years', title = 'Wave',width=3),\ TableColumn(field = 'var', title = 'Variable',width=3),\ TableColumn(field = 'qtext', title = 'Question Text',width=100),\ TableColumn(field = 'res', title = 'Response Options',width=100)] data_table_2 = DataTable(source=table_source_2, columns=columns_2, selectable = True, fit_columns = True) #create data for circle/line graphs (only display after callback) bar_data = dict(Years= years, SampleSize = [0]*len(years)) #place-holding zeros bar_source = ColumnDataSource(data = bar_data) #draw line and circle graphs in two tabs hover = HoverTool(tooltips=[("wave","@Years"),\ ("Sample Size", "@SampleSize")]) p1 = gen_fig('circle', bar_source, tool=hover) tab1 = Panel(child=p1, title="circle") p2 = gen_fig('line', bar_source) tab2 = Panel(child=p2, title="line") tabs = Tabs(tabs=[ tab1, tab2 ]) #requires (bar_source, table_source, table_source_2) callback = """ var br_data = source.get('data'); var tbl_data = s2.get('data'); var tbl2_data = s3.get('data'); var f = cb_obj.get('value'); var i = tbl_data['_id'].indexOf(f); br_data['SampleSize'] = tbl_data['Sample'][i]; br_data['Years'] = tbl_data['years'][i]; tbl2_data['years'] = tbl_data['years'][i];; tbl2_data['var'] = tbl_data['var'][i]; tbl2_data['qtext'] = tbl_data['qtext'][i]; tbl2_data['res'] = tbl_data['res'][i]; source.trigger('change'); s3.trigger('change'); dt2.trigger('change');""" #Select ID id_select = Select(title='Select an ID from the table above',\ value ='select',options=['None']+l_id,\ callback = CustomJS(\ args = dict(source=bar_source, s2=table_source, dt2 = data_table_2, s3 = table_source_2),\ code = callback)) html = file_html(vform(data_table,id_select,hplot(tabs,data_table_2)), CDN, "data_table") return html
time.sleep(1) times.append((datetime.datetime.now() - loop_start).total_seconds()) currents.append(float(bop.interface.query("MEAS:CURR?"))) fields.append(mag.field) # Initiate immediate current change after recording time bop.interface.write(":CURR:LEV:IMM 5.2") for i in range(50): times.append((datetime.datetime.now() - loop_start).total_seconds()) currents.append(float(bop.interface.query("MEAS:CURR?"))) fields.append(mag.field) bop.current = 0 p1 = figure(title="Magnetic Field vs. Time", x_axis_label='Time (s)', y_axis_label='Field (G)') p1.circle(times, fields, color="firebrick") p1.line(times, fields, color="firebrick") p2 = figure(title="BOP Current vs. Time", x_axis_label='Time (s)', y_axis_label='BOP Sense Current (A)') p2.circle(times, currents, color="firebrick") p2.line(times, currents, color="firebrick") q = hplot(p1, p2) output_file("BOP-Plots.html") show(q)
def plotting(self): #Tools = [hover, TapTool(), BoxZoomTool(), BoxSelectTool(), PreviewSaveTool(), ResetTool()] TOOLS="crosshair,pan,wheel_zoom,box_zoom,reset,hover,previewsave" tab_plots = [] #output_file("test.html") self.all_elements = [] self.elements_comparison = [] for attr_id, i in zip(self.attribute_ids, range(len(self.attribute_ids))): """ create plots for each datafile and put them in a tab. """ list_of_datasets = getattr(self, attr_id) y_axis_units = [x["y_unit"] for x in list_of_datasets] x_axis_units = [x["x_unit"] for x in list_of_datasets] figure_obj = figure(plot_width = 1000, plot_height = 800, y_axis_type = "log", title = attr_id, tools = TOOLS) #figure_obj.axes.major_label_text_font_size("12pt") #figure_obj.major_label_text_font_size("12pt") setattr(self, attr_id+"_"+"figure_obj",figure_obj) figure_obj.yaxis.axis_label = y_axis_units[0] figure_obj.xaxis.axis_label = x_axis_units[0] if not all(x == y_axis_units[0] for x in y_axis_units): for unit, data in zip(y_axis_units, list_of_datasets): if not unit == y_axis_units[0]: figure_obj.extra_y_ranges = {"foo": Range1d(start = np.amin(data["data"]["y"]), end = np.amax(data["data"]["y"]))} figure_obj.add_layout(LogAxis(y_range_name = "foo", axis_label = unit), "right") break if not all(x == x_axis_units[0] for x in x_axis_units): for unit, data in zip(x_axis_units, list_of_datasets): if not unit == x_axis_units[0]: figure_obj.extra_x_ranges = {"bar": Range1d(start = np.amin(data["data"]["x"]), end = np.amax(data["data"]["x"]))} figure_obj.add_layout(LinearAxis(x_range_name = "bar", axis_label = unit), "above") break figure_obj.xaxis.axis_label = list_of_datasets[0]["x_unit"] colour_list = Spectral11 + RdPu9 + Oranges9 colour_indices = [0, 2, 8, 10, 12, 14, 20, 22, 1, 3, 9, 11, 13, 15] list_of_elements = [] for dataset, color_index in zip(list_of_datasets, colour_indices): self.all_elements.append(dataset["sample element"]) #strip isotope number color = colour_list[color_index] source = ColumnDataSource(data = dataset["data"]) #Datastructure for source of plotting setattr(self, attr_id+"_"+dataset["sample element"]+"_source", source) #Source element generalized for all plotting list_of_elements.append(dataset["sample element"]) figure_obj.line("x", "y", source = getattr(self, attr_id+"_"+dataset["sample element"] +"_source"), line_width = 2, line_color = color, legend = dataset["sample element"], name = dataset["sample element"], ) hover = figure_obj.select_one(HoverTool).tooltips = [("element", "@element"), ("(x,y)", "($x, $y)")] radio_group = RadioGroup(labels = list_of_elements, active=0) """ Need to fetch default variables from input file and replace DEFAULT Block of code produces the layout of buttons and callbacks """ #Calculations on the dataset text_input_rsf = TextInput(value = "default", title = "RSF (at/cm^3): ") do_integral_button = Button(label = "Calibration Integral") smoothing_button = Button(label = "Smoothing on selected curve") text_input_sputter = TextInput(value = "default", title = "Sputter speed: float unit") text_input_crater_depth = TextInput(value = "default", title = "Depth of crater in: float") radio_group.on_change("active", lambda attr, old, new: None) text_input_xval_integral = TextInput(value = "0", title = "x-value for calibration integral ") text_input_yval_integral = TextInput(value = "0", title = "y-value for calibration integral ") #Save files for later use save_flexDPE_button = Button(label = "Save element for FlexPDE") save_all_flexDPE_button = Button(label = "Save all elements for FlexPDE") #Pointers to methods on click / change handlers do_integral_button.on_click(lambda identity = self.attribute_ids[i], radio = radio_group, x_box = text_input_xval_integral, y_box = text_input_yval_integral: self.integrate(identity, radio, x_box, y_box)) smoothing_button.on_click(lambda identity = self.attribute_ids[i], radio = radio_group: self.smoothing(identity, radio) ) save_flexDPE_button.on_click(lambda identity = self.attribute_ids[i], radio = radio_group: self.write_to_flexPDE(identity, radio)) save_all_flexDPE_button.on_click(lambda identity = self.attribute_ids[i], radio = radio_group: self.write_all_to_flexPDE(identity, radio)) text_input_rsf.on_change("value", lambda attr, old, new, radio = radio_group, identity = self.attribute_ids[i], text_input = text_input_rsf, which = "rsf": self.update_data(identity, radio, text_input, new, which)) text_input_sputter.on_change("value", lambda attr, old, new, radio = radio_group, identity = self.attribute_ids[i], text_input = text_input_sputter, which = "sputter": self.update_data(identity, radio, text_input, new, which)) text_input_crater_depth.on_change("value", lambda attr, old, new, radio = radio_group, identity = self.attribute_ids[i], text_input = text_input_crater_depth, which = "crater_depth": self.update_data(identity, radio, text_input, new, which)) #Initialization of actual plotting. tab_plots.append(Panel(child = hplot(figure_obj, vform(radio_group, save_flexDPE_button, save_all_flexDPE_button), vform(text_input_rsf, smoothing_button, text_input_sputter, text_input_crater_depth), vform(text_input_xval_integral, text_input_yval_integral, do_integral_button)), title = attr_id)) """ Check to see if one or more element exists in the samples and creat a comparison plot for each of those elements. """ for element in self.all_elements: checkers = list(self.all_elements) checkers.remove(element) if element in checkers and not element in self.elements_comparison: self.elements_comparison.append(element) """create plots for each element that is to be compared """ for comparison_element in self.elements_comparison: colour_list = Spectral11 + RdPu9 + Oranges9 colour_indices = [0, 2, 8, 10, 12, 14, 20, 22, 1, 3, 9, 11, 13, 15] figure_obj = figure(plot_width = 1000, plot_height = 800, y_axis_type = "log", title = comparison_element, tools = TOOLS) #figure_obj.xaxis.major_label_text_font_size("12pt") #figure_obj.yaxis.major_label_text_font_size("12pt") y_axis_units = [] x_axis_units = [] comparison_datasets = [] for attr_id, color_index in zip(self.attribute_ids, colour_indices): list_of_datasets = getattr(self, attr_id) for dataset in list_of_datasets: if dataset["sample element"] == comparison_element: comparison_datasets.append(dataset) y_axis_units.append(dataset["y_unit"]) x_axis_units.append(dataset["x_unit"]) figure_obj.xaxis.axis_label = comparison_datasets[-1]["x_unit"] figure_obj.yaxis.axis_label = comparison_datasets[-1]["y_unit"] if not all(x == y_axis_units[-1] for x in y_axis_units): for unit, data in zip(y_axis_units, comparison_datasets): if not unit == y_axis_units[-1]: figure_obj.extra_y_ranges = {"foo": Range1d(start = np.amin(data["data"]["y"]), end = np.amax(data["data"]["y"]))} figure_obj.add_layout(LogAxis(y_range_name = "foo", axis_label = unit), "right") break if not all(x == x_axis_units[-1] for x in x_axis_units): for unit, data in zip(x_axis_units, comparison_datasets): if not unit == x_axis_units[-1]: figure_obj.extra_x_ranges = {"bar": Range1d(start = np.amin(data["data"]["x"]), end = np.amax(data["data"]["x"]))} figure_obj.add_layout(LinearAxis(x_range_name = "bar", axis_label = unit), "above") break for attr_id, color_index in zip(self.attribute_ids, colour_indices): list_of_datasets = getattr(self, attr_id) for dataset in list_of_datasets: if dataset["sample element"] == comparison_element: color = colour_list[color_index] """ Logic that ensures that plots get put with correspoinding axes. """ if dataset["x_unit"] != x_axis_units[-1] or dataset["y_unit"] != y_axis_units[-1]: if dataset["x_unit"] != x_axis_units[-1] and dataset["y_unit"] != y_axis_units[-1]: figure_obj.line("x", "y", source = getattr(self, attr_id+"_"+dataset["sample element"]+"_source"), line_width = 2, line_color = color, legend = attr_id, x_range_name = "bar", y_range_name = "foo") elif dataset["x_unit"] != x_axis_units[-1]: figure_obj.line("x", "y", source = getattr(self, attr_id+"_"+dataset["sample element"]+"_source"), line_width = 2, line_color = color, legend = attr_id, x_range_name = "bar") else: figure_obj.line("x", "y", source = getattr(self, attr_id+"_"+dataset["sample element"]+"_source"), line_width = 2, line_color = color, legend = attr_id, y_range_name = "foo") else: figure_obj.line("x", "y", source = getattr(self, attr_id+"_"+dataset["sample element"]+"_source"), line_width = 2, line_color = color, legend = attr_id) tab_plots.append(Panel(child = figure_obj, title = comparison_element)) tabs = Tabs(tabs = tab_plots) session = push_session(curdoc()) session.show() session.loop_until_closed()
def initialize_plot(self, ranges=None): ranges = self.compute_ranges(self.layout, self.keys[-1], None) plots = [[] for i in range(self.rows)] passed_plots = [] tab_titles = {} insert_rows, insert_cols = [], [] adjoined = False for r, c in self.coords: subplot = self.subplots.get((r, c), None) if subplot is not None: shared_plots = passed_plots if self.shared_axes else None subplots = subplot.initialize_plot(ranges=ranges, plots=shared_plots) # Computes plotting offsets depending on # number of adjoined plots offset = sum(r >= ir for ir in insert_rows) if len(subplots) > 2: adjoined = True # Add pad column in this position insert_cols.append(c) if r not in insert_rows: # Insert and pad marginal row if none exists plots.insert(r+offset, [None for _ in range(len(plots[r]))]) # Pad previous rows for ir in range(r): plots[ir].insert(c+1, None) # Add to row offset insert_rows.append(r) offset += 1 # Add top marginal plots[r+offset-1] += [subplots.pop(-1), None] elif len(subplots) > 1: adjoined = True # Add pad column in this position insert_cols.append(c) # Pad previous rows for ir in range(r): plots[r].insert(c+1, None) # Pad top marginal if one exists if r in insert_rows: plots[r+offset-1] += 2*[None] else: # Pad top marginal if one exists if r in insert_rows: plots[r+offset-1] += [None] * (1+(c in insert_cols)) plots[r+offset] += subplots if len(subplots) == 1 and c in insert_cols: plots[r+offset].append(None) passed_plots.append(subplots[0]) if self.tabs: if isinstance(self.layout, Layout): tab_titles[r, c] = ' '.join(self.paths[r,c]) else: dim_vals = zip(self.layout.kdims, self.paths[r, c]) tab_titles[r, c] = ', '.join([d.pprint_value_string(k) for d, k in dim_vals]) # Replace None types with empty plots # to avoid bokeh bug if adjoined: plots = layout_padding(plots) # Determine the most appropriate composite plot type # If the object cannot be displayed in a single layout # it will be split into Tabs, for 1-row or 1-column # Layouts we use the vplot and hplots. # If there is a table and multiple rows and columns # everything will be forced to a vertical layout if self.tabs: panels = [Panel(child=child, title=tab_titles.get(r, c)) for r, row in enumerate(plots) for c, child in enumerate(row) if child is not None] layout_plot = Tabs(tabs=panels) elif len(plots) == 1 and not adjoined: layout_plot = vplot(hplot(*plots[0])) elif len(plots[0]) == 1: layout_plot = vplot(*[p[0] for p in plots]) else: layout_plot = gridplot(plots) self.handles['plot'] = layout_plot self.handles['plots'] = plots self.drawn = True return self.handles['plot']
min_interval=timedelta(100), ) y_range = Range1d(start=0, end=40, bounds=(0, 60)) y_range_extra = Range1d(start=300, end=700, bounds=(200, 1000)) ###### -- end -- ######## plot_extra = figure( x_axis_type="datetime", x_range=x_range, y_range=y_range, title= "Multiple ranges x:(2000/1/1, 2006/12/31), y1:(10, 60), y2:(200, 1000)") plot_extra.line(x, apple_y, color='lightblue') plot_extra.extra_y_ranges = {'goog': y_range_extra} plot_extra.line(x, google_y, color='pink', y_range_name='goog') plot_extra.add_layout( LinearAxis(y_range_name="goog", major_label_text_color='pink'), 'left') # Tweak the formats to make it all readable plots = [ plot_default, plot_range, plot_range_un, plot_range_rev, plot_cat_autobounded, plot_cat_unbounded, plot_cat_bounded, plot_extra ] for plot in plots: plot.title_text_font_size = '12pt' show( vplot(plot_default, hplot(plot_range, plot_range_un, plot_range_rev), hplot(plot_cat_unbounded, plot_cat_autobounded, plot_cat_bounded), plot_extra))
def getFigure(self): return hplot(self.figure, self.gaugefigure)
p21.patch('u21x','u21y',source=source1,line_width = 2,line_alpha = 0.6,color = (62,6,148),legend = "U") p21.patch('b21x','b21y',source=source1,line_width = 2,line_alpha = 0.6,color = "blue",legend = "B") p21.patch('v21x','v21y',source=source1,line_width = 2,line_alpha = 0.6,color = "violet",legend = "V") p21.patch('r21x','r21y',source=source1,line_width = 2,line_alpha = 0.6,color = "red",legend = "R") p21.xgrid.grid_line_color = None p21.ygrid.grid_line_color = None menu = [("U", "item_1"), ("V", "item_2"), ("B","item_3"), ("R", "item_4")] dropdown = Dropdown(label="U", menu=menu) select = Select( value="U - U", options=["U - U", "U - B", "U - V", "U - R", "B - U", "B - B", "B - V", "B - R", "V - U", "V - B", "V - V","V - R", "R - U", "R - B", "R - V", "R - R"]) layout_p2 = vform(slider,p2) layout_p22 = vform(select,p21) layout1 = hplot(layout_p2,layout_p22) tab2 = Panel(child=layout1, title="filters") tab3 = Panel(child=p3, title = "Detailed Plot") #.........................................Transmission passbands........................ #ux_pass = np.arange(300,425,5) #uy_pass = [0.00,0.016,0.068,0.167,0.287,0.423,0.560,0.673,0.772,0.841,0.905,0.943,0.981,0.993,1.000,0.989,0.916,0.804,0.625,0.423,0.238,0.114,0.051,0.019,0.000] #bx_pass = np.arange(360,570,10) #by_pass = [0.0,0.030,0.134,0.567,0.920,0.978,1.000,0.978,0.935,0.853,0.740,0.640,0.536,0.424,0.325,0.235,0.150,0.095,0.043,0.009,0.0] #vx_pass = np.arange(470,710,10) #vy_pass = [0.000,0.030,0.163,0.458,0.780,0.967,1.000,0.973,0.898,0.792,0.684,0.574,0.461,0.359,0.270,0.197,0.135,0.081,0.045,0.025,0.017,0.013,0.009,0.000]
def plotting(self): if self.debug: self.debug_file = open("debug_output.txt", "w") self.debug_file.write("Initialized plotting subroutine \n") TOOLS="pan,wheel_zoom,box_zoom,reset,hover,previewsave" tab_plots = [] self.all_elements = [] self.elements_comparison = [] for filename in self.filenames: if "ITO" in filename: tab_plots.append(self.mass_plotting(filename)) continue data_dict = self.data_generation(filename) self.data_test(data_dict) name_check = data_dict["gen_info"]["DATA FILES"] attr_id = name_check[1][4][:-3] + "_" + name_check[2][2] self.attribute_ids.append(attr_id) attr_extra_y_ranges = False attr_extra_x_ranges = False local_source_line = [] """ create plots for each datafile and put them in a tab. """ y_axis_units = [x["y_unit"] for x in data_dict["data"]] x_axis_units = [x["x_unit"] for x in data_dict["data"]] figure_obj = figure(plot_width = 1000, plot_height = 800, y_axis_type = "log", title = attr_id, tools = TOOLS) #figure_obj.axes.major_label_text_font_size("12pt") #figure_obj.major_label_text_font_size("12pt") hover = figure_obj.select(dict(type = HoverTool)) hover.tooltips = [ ("Element:", "@element"), ("(x, y):", "($x, $y)")] self.figure_data.append((figure_obj, data_dict)) figure_obj.yaxis.axis_label = y_axis_units[0] figure_obj.xaxis.axis_label = x_axis_units[0] if not all(x == y_axis_units[0] for x in y_axis_units): for unit, dataset in zip(y_axis_units, data_dict["data"]): if not unit == y_axis_units[0]: extra_y_ranges_exists = attr_extra_y_ranges extra_y_ranges_exists = True if self.debug: self.debug_file.write("Added extra y-axis for file_id: %s, element: %s | New length %g \n" %(attr_id, dataset["sample_element"], len(figure_obj.yaxis))) figure_obj.extra_y_ranges = {"foo": Range1d(start = np.amin(dataset["y"]), end = np.amax(dataset["y"]))} figure_obj.add_layout(LogAxis(y_range_name = "foo", axis_label = unit), "right") break if not all(x == x_axis_units[0] for x in x_axis_units): for unit, dataset in zip(x_axis_units, data_dict["data"]): if not unit == x_axis_units[0]: extra_x_ranges_exists = attr_extra_x_ranges extra_x_ranges_exists = True if self.debug: self.debug_file.write("Added extra x-axis for file_id: %s, element: %s. | New length %g \n" %(attr_id, dataset["sample_element"], len(figure_obj.yaxis))) figure_obj.extra_x_ranges = {"bar": Range1d(start = np.amin(dataset["x"]), end = np.amax(dataset["x"]))} figure_obj.add_layout(LinearAxis(x_range_name = "bar", axis_label = unit), "above") break figure_obj.xaxis.axis_label = x_axis_units[0] colour_list = Spectral11 + RdPu9 + Oranges9 colour_indices = [0, 2, 8, 10, 12, 14, 20, 22, 1, 3, 9, 11, 13, 15] list_of_elements = [] source_list = [] line_list = [] for dataset, color_index in zip(data_dict["data"], colour_indices): self.all_elements.append(dataset["sample_element"]) #strip isotope number color = colour_list[color_index] source = ColumnDataSource(data = dataset) #Datastructure for source of plotting self.source_test(source) list_of_elements.append(dataset["sample_element"]) line_glyph = figure_obj.line("x", "y", source = source, line_width = 2, line_color = color, legend = dataset["sample_element"]) if self.debug: self.debug_file.write("Create line object on figure %s at %s \n" %(id(figure_obj), id(line_glyph))) line_list.append(line_glyph) source_list.append(source) local_source_line.append([[source, line] for source, line in zip(source_list, line_list)]) self.source_line.append(local_source_line) #Calculations on the dataset text_input_rsf = TextInput(value = "default", title = "RSF or SF (at/cm^3): ") do_integral_button = Button(label = "Calibration integral") smoothing_button = Button(label = "smth selct elem") matplot_button = Button(label = "Create matplotlib fig") text_input_sputter = TextInput(value = "default", title = "Sputter speed: number unit") text_input_crater_depth = TextInput(value = "default", title = "Depth of crater in: number unit") radio_group = RadioGroup(labels = list_of_elements, active=0) text_input_xval_integral = TextInput(value = "0", title = "x-delimiter ") text_input_dose = TextInput(value = "0", title = "Dose[cm^-2] ") #Save files for later use save_flexDPE_button = Button(label = "Save element for FlexPDE") save_all_flexDPE_button = Button(label = "Save all elements for FlexPDE") save_textfile_button = Button(label = "Sava Data in textfile") #Pointers to methods on click / change handlers radio_group.on_change("active", lambda attr, old, new: None) matplot_button.on_click(lambda source_list = source_list: self.matplotlib_export(source_list)) do_integral_button.on_click(lambda source_list = source_list, line_list = line_list, source_line = self.source_line, figure_data = self.figure_data, data_dict = data_dict, radio = radio_group, x_box = text_input_xval_integral, dose = text_input_dose, extra_y_ranges = attr_extra_y_ranges: self.integrate(data_dict, source_list, line_list, source_line, figure_data, radio, x_box, dose, extra_y_ranges)) smoothing_button.on_click(lambda source_list = source_list, radio = radio_group, data_dict = data_dict, x_box = text_input_xval_integral: self.smoothing(source_list, data_dict, radio, x_box) ) save_flexDPE_button.on_click(lambda source_list = source_list, attrname = attr_id, radio = radio_group: self.write_to_flexPDE(source_list, attrname, radio)) save_all_flexDPE_button.on_click(lambda source_list = source_list, attrname = attr_id: self.write_all_to_flexPDE(source_list, attrname)) save_textfile_button.on_click(lambda data_dict = data_dict, source_list = source_list, attrname = attr_id, radio = radio_group: self.write_new_datafile(data_dict, source_list, attrname,radio)) text_input_rsf.on_change("value", lambda attr, old, new, radio = radio_group, data_dict = data_dict, figure = figure_obj, source_list = source_list, text_input = text_input_rsf, line_list = line_list, which = "rsf": self.update_data(line_list, data_dict, source_list, figure, radio, text_input, new, which)) text_input_sputter.on_change("value", lambda attr, old, new, radio = radio_group, data_dict = data_dict, figure = figure_obj, source_list = source_list, text_input = text_input_sputter, which = "sputter": self.update_data(data_dict, source_list, figure, radio, text_input, new, which)) text_input_crater_depth.on_change("value", lambda attr, old, new, radio = radio_group, data_dict = data_dict, source_list = source_list, figure = figure_obj, text_input = text_input_crater_depth, which = "crater_depth": self.update_data(data_dict, source_list, figure, radio, text_input, new, which)) #Initialization of actual plotting. tab_plots.append(Panel(child = hplot(figure_obj, vform( vform(radio_group, save_flexDPE_button, save_all_flexDPE_button, save_textfile_button, matplot_button), vform(text_input_rsf, smoothing_button, text_input_sputter, text_input_crater_depth) ), vform(text_input_xval_integral, text_input_dose, do_integral_button)), title = attr_id)) """ Check to see if one or more element exists in the samples and creat a comparison plot for each of those elements. """ for element in self.all_elements: checkers = list(self.all_elements) checkers.remove(element) if element in checkers and not element in self.elements_comparison: self.elements_comparison.append(element) """create plots for each element that is to be compared """ for comparison_element in self.elements_comparison: figure_obj = figure(plot_width = 1000, plot_height = 800, y_axis_type = "log", title = comparison_element, tools = TOOLS) #figure_obj.xaxis.major_label_text_font_size("12pt") #figure_obj.yaxis.major_label_text_font_size("12pt") y_axis_units = [] x_axis_units = [] comparison_datasets = [] for data_dict_iter in self.column(self.figure_data, 1): for dataset in data_dict_iter["data"]: if dataset["sample_element"] == comparison_element: comparison_datasets.append(dataset) y_axis_units.append(dataset["y_unit"]) x_axis_units.append(dataset["x_unit"]) figure_obj.xaxis.axis_label = comparison_datasets[-1]["x_unit"] figure_obj.yaxis.axis_label = comparison_datasets[-1]["y_unit"] if not all(x == y_axis_units[-1] for x in y_axis_units): for unit, data in zip(y_axis_units, comparison_datasets): if not unit == y_axis_units[-1]: figure_obj.extra_y_ranges = {"foo": Range1d(start = np.amin(data["y"]), end = np.amax(data["y"]))} figure_obj.add_layout(LogAxis(y_range_name = "foo", axis_label = unit), "right") break if not all(x == x_axis_units[-1] for x in x_axis_units): for unit, data in zip(x_axis_units, comparison_datasets): if not unit == x_axis_units[-1]: figure_obj.extra_x_ranges = {"bar": Range1d(start = np.amin(data["x"]), end = np.amax(data["x"]))} figure_obj.add_layout(LinearAxis(x_range_name = "bar", axis_label = unit), "above") break active_sources = [] for data_dict, source_line_nested, attr_id, color_index in zip(self.column(self.figure_data, 1), self.source_line, self.attribute_ids, colour_indices): for dataset, source_lis_coup, in zip(data_dict["data"], source_line_nested[0]): source_local = source_lis_coup[0] active_sources.append(source_local) self.source_test(source_local) self.source_dataset_test(source_local, dataset) if dataset["sample_element"] == comparison_element: color = colour_list[color_index] """ Logic that ensures that plots get put with correspoinding axes. """ if dataset["x_unit"] != x_axis_units[-1] or dataset["y_unit"] != y_axis_units[-1]: if dataset["x_unit"] != x_axis_units[-1] and dataset["y_unit"] != y_axis_units[-1]: name_check = data_dict["gen_info"]["DATA FILES"] attr_id = name_check[1][4][:-3] + "_" + name_check[2][2] figure_obj.line("x", "y", source = source_local, line_width = 2, line_color = color, legend = attr_id, x_range_name = "bar", y_range_name = "foo") elif dataset["x_unit"] != x_axis_units[-1]: figure_obj.line("x", "y", source = source_local, line_width = 2, line_color = color, legend = attr_id, x_range_name = "bar") else: figure_obj.line("x", "y", source = source_local, line_width = 2, line_color = color, legend = attr_id, y_range_name = "foo") else: figure_obj.line("x", "y", source = source_local, line_width = 2, line_color = color, legend = attr_id) matplot_button = Button(label = "Create matplotlib fig") save_all_flexDPE_button = Button(label = "Save all elements for FlexPDE") matplot_button.on_click(lambda source_list = active_sources: self.matplotlib_export(source_list)) save_all_flexDPE_button.on_click(lambda source_list = active_sources, attrname = comparison_element: self.write_all_to_flexPDE(source_list, attrname)) tab_plots.append(Panel(child = hplot(figure_obj, vform(save_all_flexDPE_button, matplot_button)), title = comparison_element)) tabs = Tabs(tabs = tab_plots) #curdoc().add_root(tabs) session = push_session(curdoc()) session.show() session.loop_until_closed()
def create(self): manufacturers = sorted(mpg["manufacturer"].unique()) models = sorted(mpg["model"].unique()) transmissions = sorted(mpg["trans"].unique()) drives = sorted(mpg["drv"].unique()) classes = sorted(mpg["class"].unique()) manufacturer_select = Select(title="Manufacturer:", value="All", options=["All"] + manufacturers) manufacturer_select.on_change('value', self.on_manufacturer_change) model_select = Select(title="Model:", value="All", options=["All"] + models) model_select.on_change('value', self.on_model_change) transmission_select = Select(title="Transmission:", value="All", options=["All"] + transmissions) transmission_select.on_change('value', self.on_transmission_change) drive_select = Select(title="Drive:", value="All", options=["All"] + drives) drive_select.on_change('value', self.on_drive_change) class_select = Select(title="Class:", value="All", options=["All"] + classes) class_select.on_change('value', self.on_class_change) columns = [ TableColumn(field="manufacturer", title="Manufacturer", editor=SelectEditor(options=manufacturers), formatter=StringFormatter(font_style="bold")), TableColumn(field="model", title="Model", editor=StringEditor(completions=models)), TableColumn(field="displ", title="Displacement", editor=NumberEditor(step=0.1), formatter=NumberFormatter(format="0.0")), TableColumn(field="year", title="Year", editor=IntEditor()), TableColumn(field="cyl", title="Cylinders", editor=IntEditor()), TableColumn(field="trans", title="Transmission", editor=SelectEditor(options=transmissions)), TableColumn(field="drv", title="Drive", editor=SelectEditor(options=drives)), TableColumn(field="class", title="Class", editor=SelectEditor(options=classes)), TableColumn(field="cty", title="City MPG", editor=IntEditor()), TableColumn(field="hwy", title="Highway MPG", editor=IntEditor()), ] data_table = DataTable(source=self.source, columns=columns, editable=True) plot = Plot(title=None, x_range= DataRange1d(), y_range=DataRange1d(), plot_width=1000, plot_height=300) # Set up x & y axis plot.add_layout(LinearAxis(), 'below') yaxis = LinearAxis() plot.add_layout(yaxis, 'left') plot.add_layout(Grid(dimension=1, ticker=yaxis.ticker)) # Add Glyphs cty_glyph = Circle(x="index", y="cty", fill_color="#396285", size=8, fill_alpha=0.5, line_alpha=0.5) hwy_glyph = Circle(x="index", y="hwy", fill_color="#CE603D", size=8, fill_alpha=0.5, line_alpha=0.5) cty = plot.add_glyph(self.source, cty_glyph) hwy = plot.add_glyph(self.source, hwy_glyph) # Add the tools tooltips = [ ("Manufacturer", "@manufacturer"), ("Model", "@model"), ("Displacement", "@displ"), ("Year", "@year"), ("Cylinders", "@cyl"), ("Transmission", "@trans"), ("Drive", "@drv"), ("Class", "@class"), ] cty_hover_tool = HoverTool(renderers=[cty], tooltips=tooltips + [("City MPG", "@cty")]) hwy_hover_tool = HoverTool(renderers=[hwy], tooltips=tooltips + [("Highway MPG", "@hwy")]) select_tool = BoxSelectTool(renderers=[cty, hwy], dimensions=['width']) plot.add_tools(cty_hover_tool, hwy_hover_tool, select_tool) controls = vplot(manufacturer_select, model_select, transmission_select, drive_select, class_select) top_panel = hplot(controls, plot) layout = vplot(top_panel, data_table) return layout
from bokeh.io import hplot, output_file, show from bokeh.plotting import figure output_file("layout.html") x = list(range(11)) y0 = x y1 = [10 - i for i in x] y2 = [abs(i - 5) for i in x] # create a new plot s1 = figure(width=250, plot_height=250, title=None) s1.circle(x, y0, size=10, color="navy", alpha=0.5) # create another one s2 = figure(width=250, height=250, title=None) s2.triangle(x, y1, size=10, color="firebrick", alpha=0.5) # create and another s3 = figure(width=250, height=250, title=None) s3.square(x, y2, size=10, color="olive", alpha=0.5) # put all the plots in an HBox p = hplot(s1, s2, s3) # show the results show(p)
def nb_view_patches(Yr, A, C, b, f, d1, d2, image_neurons=None, thr=0.99, denoised_color=None): ''' Interactive plotting utility for ipython notbook Parameters ----------- Yr: np.ndarray movie A,C,b,f: np.ndarrays outputs of matrix factorization algorithm d1,d2: floats dimensions of movie (x and y) image_neurons: np.ndarray image to be overlaid to neurons (for instance the average) thr: double threshold regulating the extent of the displayed patches denoised_color: string or None color name (e.g. 'red') or hex color code (e.g. '#F0027F') ''' colormap = cm.get_cmap("jet") # choose any matplotlib colormap here grayp = [mpl.colors.rgb2hex(m) for m in colormap(np.arange(colormap.N))] nr, T = C.shape nA2 = np.sum(np.array(A)**2, axis=0) b = np.squeeze(b) f = np.squeeze(f) #Y_r = np.array(spdiags(1/nA2,0,nr,nr)*(A.T*np.matrix(Yr-b[:,np.newaxis]*f[np.newaxis] - A.dot(C))) + C) Y_r = np.array( spdiags(old_div(1, nA2), 0, nr, nr) * (A.T * np.matrix(Yr) - (A.T * np.matrix(b[:, np.newaxis])) * np.matrix(f[np.newaxis]) - A.T.dot(A) * np.matrix(C)) + C) bpl.output_notebook() x = np.arange(T) z = old_div(np.squeeze(np.array(Y_r[:, :].T)), 100) k = np.reshape(np.array(A), (d1, d2, A.shape[1]), order='F') if image_neurons is None: image_neurons = np.nanmean(k, axis=2) fig = pl.figure() coors = plot_contours(coo_matrix(A), image_neurons, thr=thr) pl.close() # cc=coors[0]['coordinates']; cc1 = [cor['coordinates'][:, 0] for cor in coors] cc2 = [cor['coordinates'][:, 1] for cor in coors] c1 = cc1[0] c2 = cc2[0] npoints = list(range(len(c1))) source = ColumnDataSource(data=dict( x=x, y=z[:, 0], y2=old_div(C[0], 100), z=z, z2=old_div(C.T, 100))) source2 = ColumnDataSource( data=dict(x=npoints, c1=c1, c2=c2, cc1=cc1, cc2=cc2)) plot = bpl.figure(plot_width=600, plot_height=300) plot.line('x', 'y', source=source, line_width=1, line_alpha=0.6) if denoised_color is not None: plot.line('x', 'y2', source=source, line_width=1, line_alpha=0.6, color=denoised_color) callback = CustomJS(args=dict(source=source, source2=source2), code=""" var data = source.get('data'); var f = cb_obj.get('value')-1 x = data['x'] y = data['y'] y2 = data['y2'] for (i = 0; i < x.length; i++) { y[i] = data['z'][i][f] y2[i] = data['z2'][i][f] } var data2 = source2.get('data'); c1 = data2['c1']; c2 = data2['c2']; cc1 = data2['cc1']; cc2 = data2['cc2']; for (i = 0; i < c1.length; i++) { c1[i] = cc1[f][i] c2[i] = cc2[f][i] } source2.trigger('change'); source.trigger('change'); """) slider = bokeh.models.Slider(start=1, end=Y_r.shape[0], value=1, step=1, title="Neuron Number", callback=callback) xr = Range1d(start=0, end=image_neurons.shape[1]) yr = Range1d(start=image_neurons.shape[0], end=0) plot1 = bpl.figure(x_range=xr, y_range=yr, plot_width=300, plot_height=300) plot1.image(image=[image_neurons[::-1, :]], x=0, y=image_neurons.shape[0], dw=d2, dh=d1, palette=grayp) plot1.patch('c1', 'c2', alpha=0.6, color='purple', line_width=2, source=source2) layout = vform(slider, hplot(plot1, plot)) bpl.show(layout) return Y_r
from bokeh.io import hplot from bokeh.plotting import figure x = list(range(11)) y0 = x y1 = [10 - i for i in x] y2 = [abs(i - 5) for i in x] # create a new plot s1 = figure(width=250, plot_height=250, title=None) s1.circle(x, y0, size=10, color="navy", alpha=0.5) # create another one s2 = figure(width=250, height=250, title=None) s2.triangle(x, y1, size=10, color="firebrick", alpha=0.5) # create and another s3 = figure(width=250, height=250, title=None) s3.square(x, y2, size=10, color="olive", alpha=0.5) # put all the plots in a HBox p = hplot(s1, s2, s3) # show the results # script, div = components(p)
p21.xgrid.grid_line_color = None p21.ygrid.grid_line_color = None menu = [("U", "item_1"), ("V", "item_2"), ("B", "item_3"), ("R", "item_4")] dropdown = Dropdown(label="U", menu=menu) select = Select(value="U - U", options=[ "U - U", "U - B", "U - V", "U - R", "B - U", "B - B", "B - V", "B - R", "V - U", "V - B", "V - V", "V - R", "R - U", "R - B", "R - V", "R - R" ]) layout_p2 = vform(slider, p2) layout_p22 = vform(select, p21) layout1 = hplot(layout_p2, layout_p22) tab2 = Panel(child=layout1, title="filters") tab3 = Panel(child=p3, title="Detailed Plot") #.........................................Transmission passbands........................ #ux_pass = np.arange(300,425,5) #uy_pass = [0.00,0.016,0.068,0.167,0.287,0.423,0.560,0.673,0.772,0.841,0.905,0.943,0.981,0.993,1.000,0.989,0.916,0.804,0.625,0.423,0.238,0.114,0.051,0.019,0.000] #bx_pass = np.arange(360,570,10) #by_pass = [0.0,0.030,0.134,0.567,0.920,0.978,1.000,0.978,0.935,0.853,0.740,0.640,0.536,0.424,0.325,0.235,0.150,0.095,0.043,0.009,0.0] #vx_pass = np.arange(470,710,10) #vy_pass = [0.000,0.030,0.163,0.458,0.780,0.967,1.000,0.973,0.898,0.792,0.684,0.574,0.461,0.359,0.270,0.197,0.135,0.081,0.045,0.025,0.017,0.013,0.009,0.000]
def get_plot(self): return hplot(self.plot)
def update(): global layout global energy_per_capita new_df = data_changed(energy_per_capita) if new_df is not None: energy_per_capita = new_df layout.children[0] = create_line(energy_per_capita) layout.children[1] = create_bar(energy_per_capita) line = create_line(energy_per_capita) bar = create_bar(energy_per_capita) desc1 = Paragraph(text=""" This example shows live integration between bokeh server and Excel using XLWings.""") desc2 = Paragraph(text=""" *** YOU MUST HAVE EXCEL and XLWINGS INSTALLED ON YOUR MACHINE FOR IT TO WORK *** """) desc3 = Paragraph(text=""" It opens this plots window and an excel spreadsheet instance with the values being plotted. When user changes the values on the excel spreadsheet the plots will be updated accordingly. It's not required to save the spreadsheet for the plots to update. """) layout = vplot(desc1, desc2, desc3, hplot(line, bar)) curdoc().add_root(layout) curdoc().add_periodic_callback(update, 500) session.show() # open the document in a browser session.loop_until_closed() # run forever
end=date(2004, 12, 31), bounds=(date(2001, 1, 1), date(2006, 12, 31))) y_range = Range1d(start=00, end=40, bounds=(10, 60)) y_range_extra = Range1d(start=300, end=700, bounds=(200, 1000)) ###### -- end -- ######## plot_extra = figure( x_axis_type="datetime", x_range=x_range, y_range=y_range, title= "Multiple ranges x:(2001/1/1, 2006/12/31), y1:(10, 60), y2:(200, 1000)") plot_extra.line(x, apple_y, color='lightblue') plot_extra.extra_y_ranges = {'goog': y_range_extra} plot_extra.line(x, google_y, color='pink', y_range_name='goog') plot_extra.add_layout( LinearAxis(y_range_name="goog", major_label_text_color='pink'), 'left') # Tweak the formats to make it all readable plots = [ plot_datarange, plot_range, plot_range_un, plot_range_rev, plot_cat_autobounded, plot_cat_unbounded, plot_cat_bounded, plot_extra ] for plot in plots: plot.title_text_font_size = '12pt' show( vplot(plot_datarange, hplot(plot_range, plot_range_un, plot_range_rev), hplot(plot_cat_autobounded, plot_cat_unbounded, plot_cat_bounded), plot_extra))
# r2.glyph.line_alpha = 1 - 0.8 * abs(step) global y1, y2, y3, y4, y5 y1 = np.delete(y1, 0) y2 = np.delete(y2, 0) y3 = np.delete(y3, 0) y4 = np.delete(y4, 0) y5 = np.delete(y5, 0) read = pd.read_pickle('./feature_vector') y1 = np.append(y1, read.ent_ip_src) y2 = np.append(y2, read.ent_tp_src) y3 = np.append(y3, read.ent_tp_dst) y4 = np.append(y4, read.ent_packet_type) y5 = np.append(y5, read.total_packets) r1.data_source.data["y"] = y1 r2.data_source.data["y"] = y2 r3.data_source.data["y"] = y3 r4.data_source.data["y"] = y4 r5.data_source.data["y"] = y5 # print "y1=",y1 curdoc().add_periodic_callback(update, 5000) #millisecs # grid = vplot([[p1, p2, p3], [p4, p5, None]]) # vertical = vplot(p1,p2,p3,p4,p5) vertical = hplot(p, p5) session.show() # open the document in a browser session.loop_until_closed() # run forever
def initialize_plot(self, ranges=None): ranges = self.compute_ranges(self.layout, self.keys[-1], None) plots = [[] for i in range(self.rows)] passed_plots = [] tab_titles = {} insert_rows, insert_cols = [], [] adjoined = False for r, c in self.coords: subplot = self.subplots.get((r, c), None) if subplot is not None: shared_plots = passed_plots if self.shared_axes else None subplots = subplot.initialize_plot(ranges=ranges, plots=shared_plots) # Computes plotting offsets depending on # number of adjoined plots offset = sum(r >= ir for ir in insert_rows) if len(subplots) > 2: adjoined = True # Add pad column in this position insert_cols.append(c) if r not in insert_rows: # Insert and pad marginal row if none exists plots.insert(r + offset, [None for _ in range(len(plots[r]))]) # Pad previous rows for ir in range(r): plots[ir].insert(c + 1, None) # Add to row offset insert_rows.append(r) offset += 1 # Add top marginal plots[r + offset - 1] += [subplots.pop(-1), None] elif len(subplots) > 1: adjoined = True # Add pad column in this position insert_cols.append(c) # Pad previous rows for ir in range(r): plots[r].insert(c + 1, None) # Pad top marginal if one exists if r in insert_rows: plots[r + offset - 1] += 2 * [None] else: # Pad top marginal if one exists if r in insert_rows: plots[r + offset - 1] += [None] * (1 + (c in insert_cols)) plots[r + offset] += subplots if len(subplots) == 1 and c in insert_cols: plots[r + offset].append(None) passed_plots.append(subplots[0]) if self.tabs: if isinstance(self.layout, Layout): tab_titles[r, c] = ' '.join(self.paths[r, c]) else: dim_vals = zip(self.layout.kdims, self.paths[r, c]) tab_titles[r, c] = ', '.join( [d.pprint_value_string(k) for d, k in dim_vals]) # Replace None types with empty plots # to avoid bokeh bug if adjoined: plots = layout_padding(plots) # Determine the most appropriate composite plot type # If the object cannot be displayed in a single layout # it will be split into Tabs, for 1-row or 1-column # Layouts we use the vplot and hplots. # If there is a table and multiple rows and columns # everything will be forced to a vertical layout if self.tabs: panels = [ Panel(child=child, title=tab_titles.get(r, c)) for r, row in enumerate(plots) for c, child in enumerate(row) if child is not None ] layout_plot = Tabs(tabs=panels) elif len(plots) == 1 and not adjoined: layout_plot = vplot(hplot(*plots[0])) elif len(plots[0]) == 1: layout_plot = vplot(*[p[0] for p in plots]) else: layout_plot = gridplot(plots) self.handles['plot'] = layout_plot self.handles['plots'] = plots self.drawn = True return self.handles['plot']
#for mytool in Tools: # mytool.plot = figure_obj #figure_obj.tools = Tools figure_obj.line("x", "y", source=two[0], line_width=2, line_color=colour_list[3]) figure_obj.line("x", "y", source=two[1], line_width=2, line_color=colour_list[1]) text = TextInput(title="title", value='my sine wave') radio = RadioGroup(labels=["0", "1"], active=0) text.on_change('value', lambda attr, old, new, radio=radio, sources=two: update_title(new, radio, sources)) tabs.append( Panel(child=hplot(figure_obj, vform(text, radio)), title="two by two")) tabs = Tabs(tabs=tabs) session = push_session(curdoc()) session.show() session.loop_until_closed()
s3.hbar(y = [1,2,3], height=0.5, left = 0, right = stats_deaths, color="#CAB2D6")""" #vertical_plot = vplot(p,s3) s3.xaxis.axis_label = 'Estimated Number of Cases (1000)' #s3.yaxis.axis_label = 'Cancer Type' s3.title.text_font_size = "25px" label_opts = dict( x=230, y=0, x_units='screen', y_units='screen' ) msg1 = '(Based on Developed and under developed Region)' #Subtitle addition hack as it is not supported adding through label for plot: mortality and new cases for breast cancer plot. caption1 = Label(text =msg1, **label_opts) s3.add_layout(caption1, "above") p = hplot(s1,vplot(s2,s3)) """p.legend.label_text_font = "times" p.legend.label_text_font_style = "italic" p.legend.label_text_color = "navy""" #show(vertical_plot) show(p) #plots = {'Average': s1, "Stages": s2} #script, div = components(plots) #print script #print div
def update(): global layout global energy_per_capita new_df = data_changed(energy_per_capita) if new_df is not None: energy_per_capita = new_df plots_box.children[0] = create_line(energy_per_capita) plots_box.children[1] = create_bar(energy_per_capita) line = create_line(energy_per_capita) bar = create_bar(energy_per_capita) desc1 = Paragraph(text=""" This example shows live integration between bokeh server and Excel using XLWings.""") desc2 = Paragraph(text=""" *** YOU MUST HAVE EXCEL and XLWINGS INSTALLED ON YOUR MACHINE FOR IT TO WORK *** """) desc3 = Paragraph(text=""" It opens this plots window and an excel spreadsheet instance with the values being plotted. When user changes the values on the excel spreadsheet the plots will be updated accordingly. It's not required to save the spreadsheet for the plots to update. """) plots_box = hplot(line, bar) layout = vplot(desc1, desc2, desc3, plots_box) curdoc().add_root(layout) curdoc().add_periodic_callback(update, 500) session.show() # open the document in a browser session.loop_until_closed() # run forever
def plot(): name = request.args.get('name') items = request.args.get('items') #print items # get webpage: web = 'https://www.quandl.com/api/v3/datatables/WIKI/PRICES.json?ticker=' + name + '&qopts.columns=date' + items + '&api_key=vE8zyFxDsKyf5NnGyDdC' #print web # get data r = requests.get(web) jdata = simplejson.dumps(r.json()) datadict = simplejson.loads(jdata)['datatable'] #get column names names = [] for i in range(len(datadict['columns'])): names.append(datadict['columns'][i]['name']) # convert to dataframe df = pd.DataFrame(datadict['data'], columns=names) #print df['close'] #print df['adj_close'] #print df['close'] # check if the post request has the file part #name = request.args.get('name') #df = request.files['file'] #df = pd.DataFrame(df) #print list(df) #print df['date'] def datetime(x): return np.array(x, dtype=np.datetime64) #p1 = figure(x_axis_type="datetime", title="") #p1.grid.grid_line_alpha=0.3 #p1.xaxis.axis_label = 'Date' #p1.yaxis.axis_label = 'Price' colors = ['#A6CEE3', '#B2DF8A', '#33A02C', '#FB9A99'] plots = [None] * (len(list(df)) - 1) for i in range(1, len(list(df))): plots[i - 1] = figure(x_axis_type="datetime", title=list(df)[i]) plots[i - 1].grid.grid_line_alpha = 0.1 plots[i - 1].xaxis.axis_label = 'Date' plots[i - 1].yaxis.axis_label = 'Price' y = df[list(df)[i]] #print y x = df['date'] #print df['date'] plots[i - 1].line(datetime(x), y, color=colors[i - 1], legend=list(df)[i]) p = hplot(*plots) #p1.line(datetime(df['date']), df['close']) #p1.legend.location = "top_left" #window_size = 30 script, div = components(p) return encode_utf8( render_template("plot.html", name=name, script=script, div=div))
data1 = source1.get('data') f = cb_obj.get('value') date = sorted(data1.keys())[f-1] r = data1[date] data1['radius'] = r source1.trigger('change') data2 = source2.get('data') r = data2[date] data2['radius'] = r source2.trigger('change') slider = Slider(start=1, end=len(sorted(source1.data.keys())[:-4]), value=1, step=1, title="hour", callback=CustomJS.from_py_func(callback), orientation='horizontal') layout = hplot(plot1, plot2) layout = vform(layout, slider) show(layout) save(layout, 'HourlyTripsOneDay.html') df_StartCount = df.loc[:, ['start station id', 'starttime']] df_StartCount['started trips'] = 1 df_StartCount = df_StartCount.groupby([pd.Grouper(freq='D', key='starttime'), 'start station id']).sum() df_StartCount = df_StartCount.unstack(level=0)['started trips'].reset_index() df_StartCount = pd.merge(lut_Start.reset_index(), df_StartCount.fillna(0)) df_StartCount['radius'] = df_StartCount.loc[:, pd.to_datetime(df_StartCount.columns[6])] df_StartCount.columns = df_StartCount.columns.format() radius_factor = 3
# source = ColumnDataSource(row) # columns = [ # TableColumn(field="date", title="Dates", formatter=DateFormatter()), # TableColumn(field="cpm", title="CPM", formatter=NumberFormatter(format="$0.00")), # TableColumn(field="impressions", title="Impressions",formatter=NumberFormatter()), # TableColumn(field="sales_channel", title="Sales_channel"), # TableColumn(field="bins_cpm", title="bins_cpm") # ] # data_table = DataTable(source=source, columns=columns, width=800, height=810) # multi_select = MultiSelect(title="Option:", value=["foo", "quux"], options=["foo", "bar", "baz", "quux"]) #dateRange = Instance(DateRangeSlider) #dateRange = DateRangeSlider(title="Period:", name="period", value=(26-08-2015,18-09-2015), bounds=(26-08-2015,18-09-2015), range=(dict(days=1), None)) #slider = Slider(start=0, end=10, value=1, step=.1, title="eCPM_bins", orientation = "vertical") curdoc().add_periodic_callback(update, 30) session.show() # open the document in a browser session.loop_until_closed() # run forever output_file("figures.html") s = vplot(hplot(p,slider),multi_select,data_table) show(s) # renderer = p.select(dict(name='bar')) # ds = renderer[0].data_source # while True: # slider(ds.data["cpm"]) # #cursession().store_objects(ds)
## Plot with multiple ranges that are bounded x = np.array(AAPL['date'], dtype=np.datetime64) x = x[0:1000] apple_y = AAPL['adj_close'][0:1000] google_y = GOOG['adj_close'][0:1000] ###### -- ranges set here -- ######## x_range = Range1d( start=date(2000, 1, 1), end=date(2004, 12, 31), bounds=(date(2000, 1, 1), date(2006, 12, 31)), min_interval=timedelta(100), ) y_range = Range1d(start=0, end=40, bounds=(0, 60)) y_range_extra = Range1d(start=300, end=700, bounds=(200, 1000)) ###### -- end -- ######## plot_extra = figure(x_axis_type="datetime", x_range=x_range, y_range=y_range, title="Multiple ranges x:(2000/1/1, 2006/12/31), y1:(10, 60), y2:(200, 1000)") plot_extra.line(x, apple_y, color='lightblue') plot_extra.extra_y_ranges = {'goog': y_range_extra} plot_extra.line(x, google_y, color='pink', y_range_name='goog') plot_extra.add_layout(LinearAxis(y_range_name="goog", major_label_text_color='pink'), 'left') # Tweak the formats to make it all readable plots = [plot_default, plot_range, plot_range_un, plot_range_rev, plot_cat_autobounded, plot_cat_unbounded, plot_cat_bounded, plot_extra] for plot in plots: plot.title_text_font_size = '12pt' show(vplot(plot_default, hplot(plot_range, plot_range_un, plot_range_rev), hplot(plot_cat_unbounded, plot_cat_autobounded, plot_cat_bounded), plot_extra))
temp_bar_2 = temp_graph[['third_less_adv', 'abs_third_less_adv_simple', 'abs_third_less_adv']].mean() temp_bar_2 = temp_bar_2.reset_index() temp_bar_2 = temp_bar_2.rename(columns = {0:'values'}) p2_2 = figure(width=500, height=800, x_range=['Third less adv', 'Abs third less adv', 'Agg abs third less adv'], title= "Third less advanced") p2_2.quad(top=temp_bar_2['values'], bottom=0, left=['Third less adv', 'Abs third less adv', 'Agg abs third less adv'], right=['Third less adv', 'Abs third less adv', 'Agg abs third less adv'], line_width=100, color=["red","yellow","magenta"]) #p2.text([.5, 2.5], [.5, .5], text=['Yes', 'No'], text_font_size="20pt", text_align='center') #p2.xgrid.grid_line_color = None #p2.ygrid.grid_line_color = None p2_2.yaxis.minor_tick_line_color = None p2_2.xaxis.minor_tick_line_color = None #added these two lines p2_2.y_range.start = 0 p2_2.y_range.end = temp_bar['values'].max()*1.1 p2 = hplot(p2_1, p2_2) ''' temp_bar = temp_graph[['third_less_adv', 'abs_third_less_adv_simple', 'abs_third_less_adv']].mean() temp_bar = temp_bar.reset_index() temp_bar = temp_bar.rename(columns = {0:'values'}) p2 = figure(width=800, height=800, x_range=['Third less adv', 'Absolute third less adv', 'Agg absolute third less adv'], title= "Different estimates of " + temp_graph['category'].iloc[0]) p2.quad(top=temp_bar['values'], bottom=0, left=['Third less adv', 'Absolute(third less adv)', 'Agg: absolute(third less adv)'], right=['Third less adv', 'Absolute(third less adv)', 'Agg: absolute(third less adv)'], line_width=100, color=["blue","green","red"]) #p2.text([.5, 2.5], [.5, .5], text=['Yes', 'No'], text_font_size="20pt", text_align='center') #p2.xgrid.grid_line_color = None #p2.ygrid.grid_line_color = None p2.yaxis.minor_tick_line_color = None p2.xaxis.minor_tick_line_color = None #added these two lines