Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Bokeh_Y_axis_Adatptive_Formatting
import pandas as pd
import numpy as np
#In questa sezione Le librerie necessarie per visualizzare in via interattiva
#la nostra spezzata
from bokeh.layouts import column
from bokeh.models import ColumnDataSource, Plot, Select,LinearAxis, Grid, HoverTool
from bokeh.plotting import figure,curdoc
from bokeh.io import show,push_notebook, output_notebook,output_file
#Output_notebook() è necessario per visualizzare
#i grafici all'interno di jupyter notebook
output_notebook()
seed=np.random.seed(40)
decimali=np.random.random(size=20)
unità=np.random.randint(low=1,high=10,size=20)
centinaia=np.random.randint(low=100,high=1000,size=20)
print(decimali)
print(unità)
print(centinaia)
ar_index=np.arange(0,20)
#Creiamo il dataframe che conterrà
#i nostri 3 array
df=pd.DataFrame({'decimali':decimali, 'unità':unità,'centinaia':centinaia},index=ar_index)
#Scegliamo la prima colonna
#Che andremo a rappresentare
selected_column='unità'
#Creiamo una lista di tutte le possibili colonne selezionabili
selection_list=activity_list=df.columns.tolist()
#Questo è che segue è il modulo necessario
#Per visualizzare ed aggiornare il nostro grafico
#All'interno del Notebook Jupyter
def modify_doc(doc):
#Definiamo i "ticker" (i trattitini) dell'asse delle x
xrange=[0,df.index.max()]
#Definiamo i "ticker" (i trattitini) dell'asse delle y
#Sulla base della colonna selezionata di default
yrange=[0,df[selected_column].max()]
source = ColumnDataSource(data=dict(x=df.index,y=df[selected_column]))
#L'Hover è lo strumento che ci permette con il posizionamento del mouse
#di ottenere le informazioni relative
#Alla coppia di X-Y dove questo è posizionato
hover=HoverTool(tooltips=[('Valore X','@x'),('Valore Y','@y')])
plot=figure(title='Andamento',tools=[hover,'pan','wheel_zoom'], plot_width=400, plot_height=400,x_range=(xrange), y_range=(yrange))
plot.line(x='x', y="y",source=source)
#update_plot è la funzione che permette l'aggiornamento del grafico
def update_plot(attr, old, new):
selection=select.value
data=pd.DataFrame(data=df[selection], index=df.index)
source.data=ColumnDataSource(data=dict(x=data.index,y=data[selection])).data
#Potremmo anche aggiornare diversamente le y iniziali
#Ma gli array realizzati condinvidono in 0 l'origine
plot.y_range.start=0
#Questo è il punto fondamentale dove aggiorniamo
#Il range delle "lancette"-"ticker" dell'asse y
plot.y_range.end=df[selection].max()
#Possiamo anche visualizzare ad ogni nuova selezione
#l'ultimo elemento selezionato così
#Da visualizzare lo storico delle selezioni
print("Your last selection:",select.value)
#Select è l'oggetto che permette di selezionare le varie colonne
#Si caratterizza per un elemento di partenza "value"
#E per la voce options alla quale verrà assegnata
#la lista delle colonne selezionabili
select = Select(title='Seleziona un array', value=selected_column, options=selection_list)
select.on_change('value', update_plot)
#Creaiamo un layout prima della visualizzazione
layout=column(select, plot)
#Aggiungiamo il layout al documento Bokeh
doc.add_root(layout)
#Visualizziamo l'applicazione bokeh
show(modify_doc)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.