☰Read-only archive⌕
Looking for help with Bokeh?

This is a read-only archive. Ask questions and join the conversation on GitHub.

Visit Community Support on GitHub →
Archived discussions · Captured October 28, 2026

js callback

Community Support
Waqar_Malik
Waqar_Malik

I’m trying to implement the js callback using one of the examples provided.

I have a dataframe with 3 different y columns (y1, y2, y3) and I’ve defined a ‘Select’ tool that allows me to choose the ‘y’ value to be plotted against the x values. I would expect the graph to change on selection, but I observe no change.

Here is the code I’ve used. I’m not familiar with javascript, though I’ve observed that the variable f does reflect what is chosen in ‘Select’.

I think source.trigger(‘change’) is not triggering a change.

from bokeh.io import hplot, vplot
from bokeh.plotting import figure, output_file, show
from bokeh.models import CustomJS, ColumnDataSource, Select
import pandas as pd
import numpy as np

output_file(“bkh_df.html”)

df = pd.DataFrame(np.random.randn(10,3), columns=[‘y1’,‘y2’,‘y3’])
df.reset_index(inplace=True)
df.columns = [‘x’, ‘y1’, ‘y2’, ‘y3’]
source=ColumnDataSource(data=df)

p1 = figure(plot_width=500, plot_height=300, logo=None, toolbar_location=‘right’)
p1.circle(source=source, x=‘x’, y=‘y1’, size=20, alpha=0.5)

callback = CustomJS(args=dict(source=source), code="""
var data = source.get(‘data’);
var f = cb_obj.get(‘value’)
x = data[‘x’]
y = data[f]
source.trigger(‘change’);
“”")

y_axis = Select(title=“Y:”, value=‘y1’, options=[‘y1’, ‘y2’, ‘y3’], callback=callback)

show((hplot(y_axis, p1)))

``

⌁   Link to post
Sarah_Bird3
Sarah_Bird3

You’re assigning columns from data to the variables y & x, you are not updating the data frame.

you probably want to do data[‘y’] = data[f] or something like that.

···

On Tue, Oct 6, 2015 at 2:47 PM, waqy waqarmalik@gmail.com wrote:

I’m trying to implement the js callback using one of the examples provided.

I have a dataframe with 3 different y columns (y1, y2, y3) and I’ve defined a ‘Select’ tool that allows me to choose the ‘y’ value to be plotted against the x values. I would expect the graph to change on selection, but I observe no change.

Here is the code I’ve used. I’m not familiar with javascript, though I’ve observed that the variable f does reflect what is chosen in ‘Select’.

I think source.trigger(‘change’) is not triggering a change.

from bokeh.io import hplot, vplot
from bokeh.plotting import figure, output_file, show
from bokeh.models import CustomJS, ColumnDataSource, Select
import pandas as pd
import numpy as np

output_file(“bkh_df.html”)

df = pd.DataFrame(np.random.randn(10,3), columns=[‘y1’,‘y2’,‘y3’])
df.reset_index(inplace=True)
df.columns = [‘x’, ‘y1’, ‘y2’, ‘y3’]
source=ColumnDataSource(data=df)

p1 = figure(plot_width=500, plot_height=300, logo=None, toolbar_location=‘right’)
p1.circle(source=source, x=‘x’, y=‘y1’, size=20, alpha=0.5)

callback = CustomJS(args=dict(source=source), code=“”"
var data = source.get(‘data’);
var f = cb_obj.get(‘value’)
x = data[‘x’]
y = data[f]
source.trigger(‘change’);
“”")

y_axis = Select(title=“Y:”, value=‘y1’, options=[‘y1’, ‘y2’, ‘y3’], callback=callback)

show((hplot(y_axis, p1)))

``

–

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+unsubscribe@continuum.io.

To post to this group, send email to bokeh@continuum.io.

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/93ec049e-7352-422f-9569-ad5cfb9570c9%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

⌁   Link to post
Waqar_Malik
Waqar_Malik

I think the y variable in js is the attribute of the plot. That is the one that needs updating and not data[y].

This is what I could understand by the provided bokeh example.

···

On Tuesday, October 6, 2015 at 12:08:00 PM UTC-7, Sarah Bird wrote:

You’re assigning columns from data to the variables y & x, you are not updating the data frame.

you probably want to do data[‘y’] = data[f] or something like that.

On Tue, Oct 6, 2015 at 2:47 PM, waqy waqar...@gmail.com wrote:

I’m trying to implement the js callback using one of the examples provided.

I have a dataframe with 3 different y columns (y1, y2, y3) and I’ve defined a ‘Select’ tool that allows me to choose the ‘y’ value to be plotted against the x values. I would expect the graph to change on selection, but I observe no change.

Here is the code I’ve used. I’m not familiar with javascript, though I’ve observed that the variable f does reflect what is chosen in ‘Select’.

I think source.trigger(‘change’) is not triggering a change.

from bokeh.io import hplot, vplot
from bokeh.plotting import figure, output_file, show
from bokeh.models import CustomJS, ColumnDataSource, Select
import pandas as pd
import numpy as np

output_file(“bkh_df.html”)

df = pd.DataFrame(np.random.randn(10,3), columns=[‘y1’,‘y2’,‘y3’])
df.reset_index(inplace=True)
df.columns = [‘x’, ‘y1’, ‘y2’, ‘y3’]
source=ColumnDataSource(data=df)

p1 = figure(plot_width=500, plot_height=300, logo=None, toolbar_location=‘right’)
p1.circle(source=source, x=‘x’, y=‘y1’, size=20, alpha=0.5)

callback = CustomJS(args=dict(source=source), code=“”"
var data = source.get(‘data’);
var f = cb_obj.get(‘value’)
x = data[‘x’]
y = data[f]
source.trigger(‘change’);
“”")

y_axis = Select(title=“Y:”, value=‘y1’, options=[‘y1’, ‘y2’, ‘y3’], callback=callback)

show((hplot(y_axis, p1)))

``

–

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+un...@continuum.io.

To post to this group, send email to bo...@continuum.io.

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/93ec049e-7352-422f-9569-ad5cfb9570c9%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

⌁   Link to post
Bryan
Bryan

Sarah is correct. The .data attribute is just a dictionary that maps column names to arrays of data:

    {
        'x': [1,3,4,4,...],
        'y1': [....],
        'y2': [....],
        'y3': [....]
    }

To actually see any changes, you need to do one of two things:

* update the "y" property of the glyph to point to a different column

This is probably a bit difficult to to at the moment, so the other option is:

* make a special "y" column the glyph always uses, and copy data to and from it

This is much easier, here is a working example:

from bokeh.io import hplot, vplot
from bokeh.plotting import figure, output_file, show
from bokeh.models import CustomJS, ColumnDataSource, Select
import pandas as pd
import numpy as np

output_file("bkh_df.html")

df = pd.DataFrame(np.random.randn(10,3), columns=['y1','y2','y3'])
df.reset_index(inplace=True)
df.columns = ['x', 'y1', 'y2', 'y3']
df['y'] = df['y1'] # NEW
source=ColumnDataSource(data=df)

p1 = figure(plot_width=500, plot_height=300, logo=None, toolbar_location='right')
p1.circle(source=source, x='x', y='y', size=20, alpha=0.5) # CHANGED

callback = CustomJS(args=dict(source=source), code="""
        var data = source.get('data');
        var f = cb_obj.get('value')
        data['y'] = data[f] # CHANGED
        source.trigger('change');
    """)

y_axis = Select(title="Y:", value='y1', options=['y1', 'y2', 'y3'], callback=callback)

show((hplot(y_axis, p1)))

···

On Oct 6, 2015, at 2:17 PM, waqy <waqarmalik@gmail.com> wrote:

I think the y variable in js is the attribute of the plot. That is the one that needs updating and not data[y].

This is what I could understand by the provided bokeh example.
Interaction — Bokeh 3.3.2 Documentation

On Tuesday, October 6, 2015 at 12:08:00 PM UTC-7, Sarah Bird wrote:
You're assigning columns from data to the variables y & x, you are not updating the data frame.

you probably want to do data['y'] = data[f] or something like that.

On Tue, Oct 6, 2015 at 2:47 PM, waqy <waqar...@gmail.com> wrote:
I'm trying to implement the js callback using one of the examples provided.

I have a dataframe with 3 different y columns (y1, y2, y3) and I've defined a 'Select' tool that allows me to choose the 'y' value to be plotted against the x values. I would expect the graph to change on selection, but I observe no change.

Here is the code I've used. I'm not familiar with javascript, though I've observed that the variable f does reflect what is chosen in 'Select'.

I think source.trigger('change') is not triggering a change.

from bokeh.io import hplot, vplot
from bokeh.plotting import figure, output_file, show
from bokeh.models import CustomJS, ColumnDataSource, Select
import pandas as pd
import numpy as np

output_file("bkh_df.html")

df = pd.DataFrame(np.random.randn(10,3), columns=['y1','y2','y3'])
df.reset_index(inplace=True)
df.columns = ['x', 'y1', 'y2', 'y3']
source=ColumnDataSource(data=df)

p1 = figure(plot_width=500, plot_height=300, logo=None, toolbar_location='right')
p1.circle(source=source, x='x', y='y1', size=20, alpha=0.5)

callback = CustomJS(args=dict(source=source), code="""
        var data = source.get('data');
        var f = cb_obj.get('value')
        x = data['x']
        y = data[f]
        source.trigger('change');
    """)

y_axis = Select(title="Y:", value='y1', options=['y1', 'y2', 'y3'], callback=callback)

show((hplot(y_axis, p1)))

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+un...@continuum.io.
To post to this group, send email to bo...@continuum.io.
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/93ec049e-7352-422f-9569-ad5cfb9570c9%40continuum.io\.
For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+unsubscribe@continuum.io.
To post to this group, send email to bokeh@continuum.io.
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/8f61f4d9-0a7f-4068-8e64-f4ee5c6bafad%40continuum.io\.
For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

⌁   Link to post
Waqar_Malik
Waqar_Malik

Thanks. That clears things a little bit.
A follow up question: Can CustomJS be used with the charts interface in 0.10? What would I use for the source? Could I pass a dataframe to the callback ?

···

On Tuesday, October 6, 2015 at 12:48:19 PM UTC-7, Bryan Van de ven wrote:

Sarah is correct. The .data attribute is just a dictionary that maps column names to arrays of data:

{

    'x': [1,3,4,4,...],

    'y1': [....],

    'y2': [....],

    'y3': [....]

}

To actually see any changes, you need to do one of two things:

  • update the “y” property of the glyph to point to a different column

This is probably a bit difficult to to at the moment, so the other option is:

  • make a special “y” column the glyph always uses, and copy data to and from it

This is much easier, here is a working example:

from bokeh.io import hplot, vplot

from bokeh.plotting import figure, output_file, show

from bokeh.models import CustomJS, ColumnDataSource, Select

import pandas as pd

import numpy as np

output_file(“bkh_df.html”)

df = pd.DataFrame(np.random.randn(10,3), columns=[‘y1’,‘y2’,‘y3’])

df.reset_index(inplace=True)

df.columns = [‘x’, ‘y1’, ‘y2’, ‘y3’]

df[‘y’] = df[‘y1’] # NEW
source=ColumnDataSource(data=df)

p1 = figure(plot_width=500, plot_height=300, logo=None, toolbar_location=‘right’)

p1.circle(source=source, x=‘x’, y=‘y’, size=20, alpha=0.5) # CHANGED

callback = CustomJS(args=dict(source=source), code=“”"

    var data = source.get('data');

    var f = cb_obj.get('value')

    data['y'] = data[f]            # CHANGED

    source.trigger('change');

""")

y_axis = Select(title=“Y:”, value=‘y1’, options=[‘y1’, ‘y2’, ‘y3’], callback=callback)

show((hplot(y_axis, p1)))

On Oct 6, 2015, at 2:17 PM, waqy waqar...@gmail.com wrote:

I think the y variable in js is the attribute of the plot. That is the one that needs updating and not data[y].

This is what I could understand by the provided bokeh example.
http://bokeh.pydata.org/en/latest/docs/user_guide/interaction.html#customjs-for-widgets

On Tuesday, October 6, 2015 at 12:08:00 PM UTC-7, Sarah Bird wrote:

You’re assigning columns from data to the variables y & x, you are not updating the data frame.

you probably want to do data[‘y’] = data[f] or something like that.

On Tue, Oct 6, 2015 at 2:47 PM, waqy waqar...@gmail.com wrote:

I’m trying to implement the js callback using one of the examples provided.

I have a dataframe with 3 different y columns (y1, y2, y3) and I’ve defined a ‘Select’ tool that allows me to choose the ‘y’ value to be plotted against the x values. I would expect the graph to change on selection, but I observe no change.

Here is the code I’ve used. I’m not familiar with javascript, though I’ve observed that the variable f does reflect what is chosen in ‘Select’.

I think source.trigger(‘change’) is not triggering a change.

from bokeh.io import hplot, vplot

from bokeh.plotting import figure, output_file, show

from bokeh.models import CustomJS, ColumnDataSource, Select

import pandas as pd

import numpy as np

output_file(“bkh_df.html”)

df = pd.DataFrame(np.random.randn(10,3), columns=[‘y1’,‘y2’,‘y3’])

df.reset_index(inplace=True)

df.columns = [‘x’, ‘y1’, ‘y2’, ‘y3’]

source=ColumnDataSource(data=df)

p1 = figure(plot_width=500, plot_height=300, logo=None, toolbar_location=‘right’)

p1.circle(source=source, x=‘x’, y=‘y1’, size=20, alpha=0.5)

callback = CustomJS(args=dict(source=source), code=“”"

    var data = source.get('data');
    var f = cb_obj.get('value')
    x = data['x']
    y = data[f]
    source.trigger('change');
""")

y_axis = Select(title=“Y:”, value=‘y1’, options=[‘y1’, ‘y2’, ‘y3’], callback=callback)

show((hplot(y_axis, p1)))

–
You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+un...@continuum.io.

To post to this group, send email to bo...@continuum.io.

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/93ec049e-7352-422f-9569-ad5cfb9570c9%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

–
You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+un...@continuum.io.

To post to this group, send email to bo...@continuum.io.

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/8f61f4d9-0a7f-4068-8e64-f4ee5c6bafad%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

⌁   Link to post
Ben_Cipollini1
Ben_Cipollini1

I am wondering similar things about the charts interface…

···

On Tue, Oct 6, 2015 at 4:19 PM, waqy waqarmalik@gmail.com wrote:

Thanks. That clears things a little bit.
A follow up question: Can CustomJS be used with the charts interface in 0.10? What would I use for the source? Could I pass a dataframe to the callback ?

On Tuesday, October 6, 2015 at 12:48:19 PM UTC-7, Bryan Van de ven wrote:

Sarah is correct. The .data attribute is just a dictionary that maps column names to arrays of data:

{

    'x': [1,3,4,4,...],

    'y1': [....],

    'y2': [....],

    'y3': [....]

}

To actually see any changes, you need to do one of two things:

  • update the “y” property of the glyph to point to a different column

This is probably a bit difficult to to at the moment, so the other option is:

  • make a special “y” column the glyph always uses, and copy data to and from it

This is much easier, here is a working example:

from bokeh.io import hplot, vplot

from bokeh.plotting import figure, output_file, show

from bokeh.models import CustomJS, ColumnDataSource, Select

import pandas as pd

import numpy as np

output_file(“bkh_df.html”)

df = pd.DataFrame(np.random.randn(10,3), columns=[‘y1’,‘y2’,‘y3’])

df.reset_index(inplace=True)

df.columns = [‘x’, ‘y1’, ‘y2’, ‘y3’]

df[‘y’] = df[‘y1’] # NEW
source=ColumnDataSource(data=df)

p1 = figure(plot_width=500, plot_height=300, logo=None, toolbar_location=‘right’)

p1.circle(source=source, x=‘x’, y=‘y’, size=20, alpha=0.5) # CHANGED

callback = CustomJS(args=dict(source=source), code=“”"

    var data = source.get('data');

    var f = cb_obj.get('value')

    data['y'] = data[f]            # CHANGED

    source.trigger('change');

""")

y_axis = Select(title=“Y:”, value=‘y1’, options=[‘y1’, ‘y2’, ‘y3’], callback=callback)

show((hplot(y_axis, p1)))

On Oct 6, 2015, at 2:17 PM, waqy waqar...@gmail.com wrote:

I think the y variable in js is the attribute of the plot. That is the one that needs updating and not data[y].

This is what I could understand by the provided bokeh example.
http://bokeh.pydata.org/en/latest/docs/user_guide/interaction.html#customjs-for-widgets

On Tuesday, October 6, 2015 at 12:08:00 PM UTC-7, Sarah Bird wrote:

You’re assigning columns from data to the variables y & x, you are not updating the data frame.

you probably want to do data[‘y’] = data[f] or something like that.

On Tue, Oct 6, 2015 at 2:47 PM, waqy waqar...@gmail.com wrote:

I’m trying to implement the js callback using one of the examples provided.

I have a dataframe with 3 different y columns (y1, y2, y3) and I’ve defined a ‘Select’ tool that allows me to choose the ‘y’ value to be plotted against the x values. I would expect the graph to change on selection, but I observe no change.

Here is the code I’ve used. I’m not familiar with javascript, though I’ve observed that the variable f does reflect what is chosen in ‘Select’.

I think source.trigger(‘change’) is not triggering a change.

from bokeh.io import hplot, vplot

from bokeh.plotting import figure, output_file, show

from bokeh.models import CustomJS, ColumnDataSource, Select

import pandas as pd

import numpy as np

output_file(“bkh_df.html”)

df = pd.DataFrame(np.random.randn(10,3), columns=[‘y1’,‘y2’,‘y3’])

df.reset_index(inplace=True)

df.columns = [‘x’, ‘y1’, ‘y2’, ‘y3’]

source=ColumnDataSource(data=df)

p1 = figure(plot_width=500, plot_height=300, logo=None, toolbar_location=‘right’)

p1.circle(source=source, x=‘x’, y=‘y1’, size=20, alpha=0.5)

callback = CustomJS(args=dict(source=source), code=“”"

    var data = source.get('data');
    var f = cb_obj.get('value')
    x = data['x']
    y = data[f]
    source.trigger('change');
""")

y_axis = Select(title=“Y:”, value=‘y1’, options=[‘y1’, ‘y2’, ‘y3’], callback=callback)

show((hplot(y_axis, p1)))

–
You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+un...@continuum.io.

To post to this group, send email to bo...@continuum.io.

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/93ec049e-7352-422f-9569-ad5cfb9570c9%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

–
You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+un...@continuum.io.

To post to this group, send email to bo...@continuum.io.

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/8f61f4d9-0a7f-4068-8e64-f4ee5c6bafad%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

–

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+unsubscribe@continuum.io.

To post to this group, send email to bokeh@continuum.io.

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/12f28c37-39e5-4bff-b92e-958b4785cc4b%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

⌁   Link to post
Bryan
Bryan

The short answer is "yes" but the longer answer is that it's probably not as convenient as it could be. In particular, passing the data frame will not work, you'd have to poke around and get the right data source and pass that in. Suggestions for simple and approachable spellings are welcome.

Bryan

···

On Oct 7, 2015, at 3:28 PM, Ben Cipollini <ben.cipollini@gmail.com> wrote:

I am wondering similar things about the charts interface...

On Tue, Oct 6, 2015 at 4:19 PM, waqy <waqarmalik@gmail.com> wrote:
Thanks. That clears things a little bit.
A follow up question: Can CustomJS be used with the charts interface in 0.10? What would I use for the source? Could I pass a dataframe to the callback ?

On Tuesday, October 6, 2015 at 12:48:19 PM UTC-7, Bryan Van de ven wrote:

Sarah is correct. The .data attribute is just a dictionary that maps column names to arrays of data:

    {
        'x': [1,3,4,4,...],
        'y1': [....],
        'y2': [....],
        'y3': [....]
    }

To actually see any changes, you need to do one of two things:

* update the "y" property of the glyph to point to a different column

This is probably a bit difficult to to at the moment, so the other option is:

* make a special "y" column the glyph always uses, and copy data to and from it

This is much easier, here is a working example:

from bokeh.io import hplot, vplot
from bokeh.plotting import figure, output_file, show
from bokeh.models import CustomJS, ColumnDataSource, Select
import pandas as pd
import numpy as np

output_file("bkh_df.html")

df = pd.DataFrame(np.random.randn(10,3), columns=['y1','y2','y3'])
df.reset_index(inplace=True)
df.columns = ['x', 'y1', 'y2', 'y3']
df['y'] = df['y1'] # NEW
source=ColumnDataSource(data=df)

p1 = figure(plot_width=500, plot_height=300, logo=None, toolbar_location='right')
p1.circle(source=source, x='x', y='y', size=20, alpha=0.5) # CHANGED

callback = CustomJS(args=dict(source=source), code="""
        var data = source.get('data');
        var f = cb_obj.get('value')
        data['y'] = data[f] # CHANGED
        source.trigger('change');
    """)

y_axis = Select(title="Y:", value='y1', options=['y1', 'y2', 'y3'], callback=callback)

show((hplot(y_axis, p1)))

> On Oct 6, 2015, at 2:17 PM, waqy <waqar...@gmail.com> wrote:
>
> I think the y variable in js is the attribute of the plot. That is the one that needs updating and not data[y].
>
> This is what I could understand by the provided bokeh example.
> Interaction — Bokeh 3.3.2 Documentation
>
>
> On Tuesday, October 6, 2015 at 12:08:00 PM UTC-7, Sarah Bird wrote:
> You're assigning columns from data to the variables y & x, you are not updating the data frame.
>
> you probably want to do data['y'] = data[f] or something like that.
>
> On Tue, Oct 6, 2015 at 2:47 PM, waqy <waqar...@gmail.com> wrote:
> I'm trying to implement the js callback using one of the examples provided.
>
> I have a dataframe with 3 different y columns (y1, y2, y3) and I've defined a 'Select' tool that allows me to choose the 'y' value to be plotted against the x values. I would expect the graph to change on selection, but I observe no change.
>
> Here is the code I've used. I'm not familiar with javascript, though I've observed that the variable f does reflect what is chosen in 'Select'.
>
> I think source.trigger('change') is not triggering a change.
>
>
> from bokeh.io import hplot, vplot
> from bokeh.plotting import figure, output_file, show
> from bokeh.models import CustomJS, ColumnDataSource, Select
> import pandas as pd
> import numpy as np
>
>
> output_file("bkh_df.html")
>
>
> df = pd.DataFrame(np.random.randn(10,3), columns=['y1','y2','y3'])
> df.reset_index(inplace=True)
> df.columns = ['x', 'y1', 'y2', 'y3']
> source=ColumnDataSource(data=df)
>
>
> p1 = figure(plot_width=500, plot_height=300, logo=None, toolbar_location='right')
> p1.circle(source=source, x='x', y='y1', size=20, alpha=0.5)
>
>
> callback = CustomJS(args=dict(source=source), code="""
> var data = source.get('data');
> var f = cb_obj.get('value')
> x = data['x']
> y = data[f]
> source.trigger('change');
> """)
>
>
>
>
> y_axis = Select(title="Y:", value='y1', options=['y1', 'y2', 'y3'], callback=callback)
>
>
> show((hplot(y_axis, p1)))
>
>
>
>
>
>
> --
> You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+un...@continuum.io.
> To post to this group, send email to bo...@continuum.io.
> To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/93ec049e-7352-422f-9569-ad5cfb9570c9%40continuum.io\.
> For more options, visit https://groups.google.com/a/continuum.io/d/optout\.
>
>
> --
> You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+un...@continuum.io.
> To post to this group, send email to bo...@continuum.io.
> To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/8f61f4d9-0a7f-4068-8e64-f4ee5c6bafad%40continuum.io\.
> For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+unsubscribe@continuum.io.
To post to this group, send email to bokeh@continuum.io.
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/12f28c37-39e5-4bff-b92e-958b4785cc4b%40continuum.io\.

For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+unsubscribe@continuum.io.
To post to this group, send email to bokeh@continuum.io.
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/CANgTvZjiPtZ_6y4ig4y3WiQiQ_%2Bv5XS7a5dXmvY_-HoAgJSoOA%40mail.gmail.com\.
For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

⌁   Link to post
Ben_Cipollini1
Ben_Cipollini1

Thanks! Can you point to any docs or examples on how to get this done? I tried using an AjaxDataSource with the BoxPlot chart, but didn’t get anywhere.

···

On Wed, Oct 7, 2015 at 1:52 PM, Bryan Van de Ven bryanv@continuum.io wrote:

The short answer is “yes” but the longer answer is that it’s probably not as convenient as it could be. In particular, passing the data frame will not work, you’d have to poke around and get the right data source and pass that in. Suggestions for simple and approachable spellings are welcome.

Bryan

On Oct 7, 2015, at 3:28 PM, Ben Cipollini ben.cipollini@gmail.com wrote:

I am wondering similar things about the charts interface…

On Tue, Oct 6, 2015 at 4:19 PM, waqy waqarmalik@gmail.com wrote:

Thanks. That clears things a little bit.

A follow up question: Can CustomJS be used with the charts interface in 0.10? What would I use for the source? Could I pass a dataframe to the callback ?

On Tuesday, October 6, 2015 at 12:48:19 PM UTC-7, Bryan Van de ven wrote:

Sarah is correct. The .data attribute is just a dictionary that maps column names to arrays of data:

{
    'x': [1,3,4,4,...],
    'y1': [....],
    'y2': [....],
    'y3': [....]
}

To actually see any changes, you need to do one of two things:

  • update the “y” property of the glyph to point to a different column

This is probably a bit difficult to to at the moment, so the other option is:

  • make a special “y” column the glyph always uses, and copy data to and from it

This is much easier, here is a working example:

from bokeh.io import hplot, vplot

from bokeh.plotting import figure, output_file, show

from bokeh.models import CustomJS, ColumnDataSource, Select

import pandas as pd

import numpy as np

output_file(“bkh_df.html”)

df = pd.DataFrame(np.random.randn(10,3), columns=[‘y1’,‘y2’,‘y3’])

df.reset_index(inplace=True)

df.columns = [‘x’, ‘y1’, ‘y2’, ‘y3’]

df[‘y’] = df[‘y1’] # NEW

source=ColumnDataSource(data=df)

p1 = figure(plot_width=500, plot_height=300, logo=None, toolbar_location=‘right’)

p1.circle(source=source, x=‘x’, y=‘y’, size=20, alpha=0.5) # CHANGED

callback = CustomJS(args=dict(source=source), code=“”"

    var data = source.get('data');
    var f = cb_obj.get('value')
    data['y'] = data[f]            # CHANGED
    source.trigger('change');
""")

y_axis = Select(title=“Y:”, value=‘y1’, options=[‘y1’, ‘y2’, ‘y3’], callback=callback)

show((hplot(y_axis, p1)))

On Oct 6, 2015, at 2:17 PM, waqy waqar...@gmail.com wrote:

I think the y variable in js is the attribute of the plot. That is the one that needs updating and not data[y].

This is what I could understand by the provided bokeh example.

http://bokeh.pydata.org/en/latest/docs/user_guide/interaction.html#customjs-for-widgets

On Tuesday, October 6, 2015 at 12:08:00 PM UTC-7, Sarah Bird wrote:

You’re assigning columns from data to the variables y & x, you are not updating the data frame.

you probably want to do data[‘y’] = data[f] or something like that.

On Tue, Oct 6, 2015 at 2:47 PM, waqy waqar...@gmail.com wrote:

I’m trying to implement the js callback using one of the examples provided.

I have a dataframe with 3 different y columns (y1, y2, y3) and I’ve defined a ‘Select’ tool that allows me to choose the ‘y’ value to be plotted against the x values. I would expect the graph to change on selection, but I observe no change.

Here is the code I’ve used. I’m not familiar with javascript, though I’ve observed that the variable f does reflect what is chosen in ‘Select’.

I think source.trigger(‘change’) is not triggering a change.

from bokeh.io import hplot, vplot

from bokeh.plotting import figure, output_file, show

from bokeh.models import CustomJS, ColumnDataSource, Select

import pandas as pd

import numpy as np

output_file(“bkh_df.html”)

df = pd.DataFrame(np.random.randn(10,3), columns=[‘y1’,‘y2’,‘y3’])

df.reset_index(inplace=True)

df.columns = [‘x’, ‘y1’, ‘y2’, ‘y3’]

source=ColumnDataSource(data=df)

p1 = figure(plot_width=500, plot_height=300, logo=None, toolbar_location=‘right’)

p1.circle(source=source, x=‘x’, y=‘y1’, size=20, alpha=0.5)

callback = CustomJS(args=dict(source=source), code=“”"

    var data = source.get('data');
    var f = cb_obj.get('value')
    x = data['x']
    y = data[f]
    source.trigger('change');
""")

y_axis = Select(title=“Y:”, value=‘y1’, options=[‘y1’, ‘y2’, ‘y3’], callback=callback)

show((hplot(y_axis, p1)))

–

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+un...@continuum.io.

To post to this group, send email to bo...@continuum.io.

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/93ec049e-7352-422f-9569-ad5cfb9570c9%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

–

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+un...@continuum.io.

To post to this group, send email to bo...@continuum.io.

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/8f61f4d9-0a7f-4068-8e64-f4ee5c6bafad%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

–

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+unsubscribe@continuum.io.

To post to this group, send email to bokeh@continuum.io.

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/12f28c37-39e5-4bff-b92e-958b4785cc4b%40continuum.io.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

–

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+unsubscribe@continuum.io.

To post to this group, send email to bokeh@continuum.io.

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/CANgTvZjiPtZ_6y4ig4y3WiQiQ_%2Bv5XS7a5dXmvY_-HoAgJSoOA%40mail.gmail.com.

For more options, visit https://groups.google.com/a/continuum.io/d/optout.

–

You received this message because you are subscribed to the Google Groups “Bokeh Discussion - Public” group.

To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+unsubscribe@continuum.io.

To post to this group, send email to bokeh@continuum.io.

To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/4A4F41F4-B253-4B5C-9F1B-2EB23DB0F779%40continuum.io.
For more options, visit https://groups.google.com/a/continuum.io/d/optout.

⌁   Link to post
Bryan
Bryan

I'm afraid I don't have an example at hand. However, one way to find objects in side a collection of Bokeh models is to use the .select method to query the object graph. YOu can see more info here:

  plots — Bokeh 3.3.2 Documentation

Bryan

···

On Oct 7, 2015, at 4:00 PM, Ben Cipollini <ben.cipollini@gmail.com> wrote:

Thanks! Can you point to any docs or examples on how to get this done? I tried using an AjaxDataSource with the BoxPlot chart, but didn't get anywhere.

On Wed, Oct 7, 2015 at 1:52 PM, Bryan Van de Ven <bryan@bokeh.org> wrote:
The short answer is "yes" but the longer answer is that it's probably not as convenient as it could be. In particular, passing the data frame will not work, you'd have to poke around and get the right data source and pass that in. Suggestions for simple and approachable spellings are welcome.

Bryan

> On Oct 7, 2015, at 3:28 PM, Ben Cipollini <ben.cipollini@gmail.com> wrote:
>
> I am wondering similar things about the charts interface...
>
> On Tue, Oct 6, 2015 at 4:19 PM, waqy <waqarmalik@gmail.com> wrote:
> Thanks. That clears things a little bit.
> A follow up question: Can CustomJS be used with the charts interface in 0.10? What would I use for the source? Could I pass a dataframe to the callback ?
>
> On Tuesday, October 6, 2015 at 12:48:19 PM UTC-7, Bryan Van de ven wrote:
>
> Sarah is correct. The .data attribute is just a dictionary that maps column names to arrays of data:
>
> {
> 'x': [1,3,4,4,...],
> 'y1': [....],
> 'y2': [....],
> 'y3': [....]
> }
>
> To actually see any changes, you need to do one of two things:
>
> * update the "y" property of the glyph to point to a different column
>
> This is probably a bit difficult to to at the moment, so the other option is:
>
> * make a special "y" column the glyph always uses, and copy data to and from it
>
> This is much easier, here is a working example:
>
> from bokeh.io import hplot, vplot
> from bokeh.plotting import figure, output_file, show
> from bokeh.models import CustomJS, ColumnDataSource, Select
> import pandas as pd
> import numpy as np
>
> output_file("bkh_df.html")
>
> df = pd.DataFrame(np.random.randn(10,3), columns=['y1','y2','y3'])
> df.reset_index(inplace=True)
> df.columns = ['x', 'y1', 'y2', 'y3']
> df['y'] = df['y1'] # NEW
> source=ColumnDataSource(data=df)
>
> p1 = figure(plot_width=500, plot_height=300, logo=None, toolbar_location='right')
> p1.circle(source=source, x='x', y='y', size=20, alpha=0.5) # CHANGED
>
> callback = CustomJS(args=dict(source=source), code="""
> var data = source.get('data');
> var f = cb_obj.get('value')
> data['y'] = data[f] # CHANGED
> source.trigger('change');
> """)
>
> y_axis = Select(title="Y:", value='y1', options=['y1', 'y2', 'y3'], callback=callback)
>
> show((hplot(y_axis, p1)))
>
>
>
> > On Oct 6, 2015, at 2:17 PM, waqy <waqar...@gmail.com> wrote:
> >
> > I think the y variable in js is the attribute of the plot. That is the one that needs updating and not data[y].
> >
> > This is what I could understand by the provided bokeh example.
> > Interaction — Bokeh 3.3.2 Documentation
> >
> >
> > On Tuesday, October 6, 2015 at 12:08:00 PM UTC-7, Sarah Bird wrote:
> > You're assigning columns from data to the variables y & x, you are not updating the data frame.
> >
> > you probably want to do data['y'] = data[f] or something like that.
> >
> > On Tue, Oct 6, 2015 at 2:47 PM, waqy <waqar...@gmail.com> wrote:
> > I'm trying to implement the js callback using one of the examples provided.
> >
> > I have a dataframe with 3 different y columns (y1, y2, y3) and I've defined a 'Select' tool that allows me to choose the 'y' value to be plotted against the x values. I would expect the graph to change on selection, but I observe no change.
> >
> > Here is the code I've used. I'm not familiar with javascript, though I've observed that the variable f does reflect what is chosen in 'Select'.
> >
> > I think source.trigger('change') is not triggering a change.
> >
> >
> > from bokeh.io import hplot, vplot
> > from bokeh.plotting import figure, output_file, show
> > from bokeh.models import CustomJS, ColumnDataSource, Select
> > import pandas as pd
> > import numpy as np
> >
> >
> > output_file("bkh_df.html")
> >
> >
> > df = pd.DataFrame(np.random.randn(10,3), columns=['y1','y2','y3'])
> > df.reset_index(inplace=True)
> > df.columns = ['x', 'y1', 'y2', 'y3']
> > source=ColumnDataSource(data=df)
> >
> >
> > p1 = figure(plot_width=500, plot_height=300, logo=None, toolbar_location='right')
> > p1.circle(source=source, x='x', y='y1', size=20, alpha=0.5)
> >
> >
> > callback = CustomJS(args=dict(source=source), code="""
> > var data = source.get('data');
> > var f = cb_obj.get('value')
> > x = data['x']
> > y = data[f]
> > source.trigger('change');
> > """)
> >
> >
> >
> >
> > y_axis = Select(title="Y:", value='y1', options=['y1', 'y2', 'y3'], callback=callback)
> >
> >
> > show((hplot(y_axis, p1)))
> >
> >
> >
> >
> >
> >
> > --
> > You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
> > To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+un...@continuum.io.
> > To post to this group, send email to bo...@continuum.io.
> > To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/93ec049e-7352-422f-9569-ad5cfb9570c9%40continuum.io\.
> > For more options, visit https://groups.google.com/a/continuum.io/d/optout\.
> >
> >
> > --
> > You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
> > To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+un...@continuum.io.
> > To post to this group, send email to bo...@continuum.io.
> > To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/8f61f4d9-0a7f-4068-8e64-f4ee5c6bafad%40continuum.io\.
> > For more options, visit https://groups.google.com/a/continuum.io/d/optout\.
>
>
> --
> You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+unsubscribe@continuum.io.
> To post to this group, send email to bokeh@continuum.io.
> To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/12f28c37-39e5-4bff-b92e-958b4785cc4b%40continuum.io\.
>
> For more options, visit https://groups.google.com/a/continuum.io/d/optout\.
>
>
> --
> You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+unsubscribe@continuum.io.
> To post to this group, send email to bokeh@continuum.io.
> To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/CANgTvZjiPtZ_6y4ig4y3WiQiQ_%2Bv5XS7a5dXmvY_-HoAgJSoOA%40mail.gmail.com\.
> For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+unsubscribe@continuum.io.
To post to this group, send email to bokeh@continuum.io.
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/4A4F41F4-B253-4B5C-9F1B-2EB23DB0F779%40continuum.io\.
For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+unsubscribe@continuum.io.
To post to this group, send email to bokeh@continuum.io.
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/CANgTvZjH26JS1wde7muzWsp9O7O8Owr8XvsC5NprvHd0buLKJw%40mail.gmail.com\.
For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

⌁   Link to post
Bryan
Bryan

Can you add an issue on GH issue to discuss improving ease of use of callbacks with bokeh.charts?

Thanks,

Bryan

···

On Oct 9, 2015, at 3:01 PM, Bryan Van de Ven <bryan@bokeh.org> wrote:

I'm afraid I don't have an example at hand. However, one way to find objects in side a collection of Bokeh models is to use the .select method to query the object graph. YOu can see more info here:

  plots — Bokeh 3.3.2 Documentation

Bryan

On Oct 7, 2015, at 4:00 PM, Ben Cipollini <ben.cipollini@gmail.com> wrote:

Thanks! Can you point to any docs or examples on how to get this done? I tried using an AjaxDataSource with the BoxPlot chart, but didn't get anywhere.

On Wed, Oct 7, 2015 at 1:52 PM, Bryan Van de Ven <bryan@bokeh.org> wrote:
The short answer is "yes" but the longer answer is that it's probably not as convenient as it could be. In particular, passing the data frame will not work, you'd have to poke around and get the right data source and pass that in. Suggestions for simple and approachable spellings are welcome.

Bryan

On Oct 7, 2015, at 3:28 PM, Ben Cipollini <ben.cipollini@gmail.com> wrote:

I am wondering similar things about the charts interface...

On Tue, Oct 6, 2015 at 4:19 PM, waqy <waqarmalik@gmail.com> wrote:
Thanks. That clears things a little bit.
A follow up question: Can CustomJS be used with the charts interface in 0.10? What would I use for the source? Could I pass a dataframe to the callback ?

On Tuesday, October 6, 2015 at 12:48:19 PM UTC-7, Bryan Van de ven wrote:

Sarah is correct. The .data attribute is just a dictionary that maps column names to arrays of data:

   {
       'x': [1,3,4,4,...],
       'y1': [....],
       'y2': [....],
       'y3': [....]
   }

To actually see any changes, you need to do one of two things:

* update the "y" property of the glyph to point to a different column

This is probably a bit difficult to to at the moment, so the other option is:

* make a special "y" column the glyph always uses, and copy data to and from it

This is much easier, here is a working example:

from bokeh.io import hplot, vplot
from bokeh.plotting import figure, output_file, show
from bokeh.models import CustomJS, ColumnDataSource, Select
import pandas as pd
import numpy as np

output_file("bkh_df.html")

df = pd.DataFrame(np.random.randn(10,3), columns=['y1','y2','y3'])
df.reset_index(inplace=True)
df.columns = ['x', 'y1', 'y2', 'y3']
df['y'] = df['y1'] # NEW
source=ColumnDataSource(data=df)

p1 = figure(plot_width=500, plot_height=300, logo=None, toolbar_location='right')
p1.circle(source=source, x='x', y='y', size=20, alpha=0.5) # CHANGED

callback = CustomJS(args=dict(source=source), code="""
       var data = source.get('data');
       var f = cb_obj.get('value')
       data['y'] = data[f] # CHANGED
       source.trigger('change');
   """)

y_axis = Select(title="Y:", value='y1', options=['y1', 'y2', 'y3'], callback=callback)

show((hplot(y_axis, p1)))

On Oct 6, 2015, at 2:17 PM, waqy <waqar...@gmail.com> wrote:

I think the y variable in js is the attribute of the plot. That is the one that needs updating and not data[y].

This is what I could understand by the provided bokeh example.
Interaction — Bokeh 3.3.2 Documentation

On Tuesday, October 6, 2015 at 12:08:00 PM UTC-7, Sarah Bird wrote:
You're assigning columns from data to the variables y & x, you are not updating the data frame.

you probably want to do data['y'] = data[f] or something like that.

On Tue, Oct 6, 2015 at 2:47 PM, waqy <waqar...@gmail.com> wrote:
I'm trying to implement the js callback using one of the examples provided.

I have a dataframe with 3 different y columns (y1, y2, y3) and I've defined a 'Select' tool that allows me to choose the 'y' value to be plotted against the x values. I would expect the graph to change on selection, but I observe no change.

Here is the code I've used. I'm not familiar with javascript, though I've observed that the variable f does reflect what is chosen in 'Select'.

I think source.trigger('change') is not triggering a change.

from bokeh.io import hplot, vplot
from bokeh.plotting import figure, output_file, show
from bokeh.models import CustomJS, ColumnDataSource, Select
import pandas as pd
import numpy as np

output_file("bkh_df.html")

df = pd.DataFrame(np.random.randn(10,3), columns=['y1','y2','y3'])
df.reset_index(inplace=True)
df.columns = ['x', 'y1', 'y2', 'y3']
source=ColumnDataSource(data=df)

p1 = figure(plot_width=500, plot_height=300, logo=None, toolbar_location='right')
p1.circle(source=source, x='x', y='y1', size=20, alpha=0.5)

callback = CustomJS(args=dict(source=source), code="""
       var data = source.get('data');
       var f = cb_obj.get('value')
       x = data['x']
       y = data[f]
       source.trigger('change');
   """)

y_axis = Select(title="Y:", value='y1', options=['y1', 'y2', 'y3'], callback=callback)

show((hplot(y_axis, p1)))

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+un...@continuum.io.
To post to this group, send email to bo...@continuum.io.
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/93ec049e-7352-422f-9569-ad5cfb9570c9%40continuum.io\.
For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+un...@continuum.io.
To post to this group, send email to bo...@continuum.io.
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/8f61f4d9-0a7f-4068-8e64-f4ee5c6bafad%40continuum.io\.
For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+unsubscribe@continuum.io.
To post to this group, send email to bokeh@continuum.io.
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/12f28c37-39e5-4bff-b92e-958b4785cc4b%40continuum.io\.

For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+unsubscribe@continuum.io.
To post to this group, send email to bokeh@continuum.io.
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/CANgTvZjiPtZ_6y4ig4y3WiQiQ_%2Bv5XS7a5dXmvY_-HoAgJSoOA%40mail.gmail.com\.
For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+unsubscribe@continuum.io.
To post to this group, send email to bokeh@continuum.io.
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/4A4F41F4-B253-4B5C-9F1B-2EB23DB0F779%40continuum.io\.
For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to bokeh+unsubscribe@continuum.io.
To post to this group, send email to bokeh@continuum.io.
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/CANgTvZjH26JS1wde7muzWsp9O7O8Owr8XvsC5NprvHd0buLKJw%40mail.gmail.com\.
For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

⌁   Link to post

End of archived discussion · Replies are disabled