I have a data frame with columns with player names and their stats. I've plotting two different stats would like the player names to appear under each dot on the scatterplot.
This is what I have so far but it's not working. For text, I assume this is the list of names I want under each point on the plot and source is where the names are coming from.
p = Scatter(dt,x='off_rating',y='def_rating',title="Offensive vs. Defensive Eff",color="navy")
labels = LabelSet(x='off_rating',y='def_rating',text="player_name",source=dt)
p.add_layout(labels)
You're on the right path. However, the source
for LabelSet
has to be a DataSource. Here is an example code.
from bokeh.plotting import show, ColumnDataSource
from bokeh.charts import Scatter
from bokeh.models import LabelSet
from pandas.core.frame import DataFrame
source = DataFrame(
dict(
off_rating=[66, 71, 72, 68, 58, 62],
def_rating=[165, 189, 220, 141, 260, 174],
names=['Mark', 'Amir', 'Matt', 'Greg', 'Owen', 'Juan']
)
)
scatter_plot = Scatter(
source,
x='off_rating',
y='def_rating',
title='Offensive vs. Defensive Eff',
color='navy')
labels = LabelSet(
x='off_rating',
y='def_rating',
text='names',
level='glyph',
x_offset=5,
y_offset=5,
source=ColumnDataSource(source),
render_mode='canvas')
scatter_plot.add_layout(labels)
show(scatter_plot)