hvplot icon indicating copy to clipboard operation
hvplot copied to clipboard

Add value labels of your data to hvplot by using parameter instead of hv.Labels()

Open SandervandenOord opened this issue 5 years ago • 6 comments

If you want to add value labels to your data you have to overlay holoviews hv.Label() on your plot:

# import libraries
import numpy as np
import pandas as pd

import holoviews as hv
import hvplot.pandas

# create some sample data
df = pd.DataFrame({
    'col1': ['bar1', 'bar2', 'bar3'],
    'col2': np.random.rand(3)
})

# create your plot
plot = df.hvplot(kind='bar', x='col1', y='col2', ylim=(0, 1.2))

# create your labels separately
# kdims specifies the x and y position of your value label
# vdims specifies the column to use for the value text of your label
labels = hv.Labels(data=df, kdims=['col1', 'col2'], vdims='col2')

# use the * symbol to overlay your labels on your plot
plot * labels

It would be nice if you could just use something like parameter

value_labels=True

to do this automagically right away with hvplot:

plot = df.hvplot(kind='bar', x='col1', y='col2', ylim=(0, 1.2), value_labels=True)

See also: https://stackoverflow.com/questions/58900736/adding-value-labels-to-hvplot-bar

If possible the default offset should also be a bit smart:

Screenshot 2019-11-17 at 16 24 49

SandervandenOord avatar Nov 17 '19 15:11 SandervandenOord

I think this would be a really nice feature.

Just as a note - I ran into this as well while working on a bar plot that is grouped:

df = pd.DataFrame([
    (' Spark', 'Row count', 17.6),  # The space is to order Spark first
    (' Spark', 'Feature engineering', 63),
    (' Spark', 'Random forest', 166),
    ('RAPIDS', 'Row count', 20.8),
    ('RAPIDS', 'Feature engineering', 24.1),
    ('RAPIDS', 'Random forest', 1.75)
], columns=['tool', 'task', 'runtime_seconds'])
df.hvplot.bar(x='task', y='runtime_seconds', by='tool')

image

I wasn't able to figure out the right hv.Labels to overlay that would put the values at the top of the bars.

jsignell avatar Jul 27 '20 14:07 jsignell

If this is agreed to be a good idea, I'd be happy to open a PR :)

jsignell avatar Jul 27 '20 14:07 jsignell

Sounds good to me; I too have wanted this!

jbednar avatar Jul 27 '20 21:07 jbednar

If you want to add value labels to your data you have to overlay holoviews hv.Label() on your plot:

# import libraries
import numpy as np
import pandas as pd

import holoviews as hv
import hvplot.pandas

# create some sample data
df = pd.DataFrame({
    'col1': ['bar1', 'bar2', 'bar3'],
    'col2': np.random.rand(3)
})

# create your plot
plot = df.hvplot(kind='bar', x='col1', y='col2', ylim=(0, 1.2))

# create your labels separately
# kdims specifies the x and y position of your value label
# vdims specifies the column to use for the value text of your label
labels = hv.Labels(data=df, kdims=['col1', 'col2'], vdims='col2')

# use the * symbol to overlay your labels on your plot
plot * labels

It would be nice if you could just use something like parameter

value_labels=True

to do this automagically right away with hvplot:

plot = df.hvplot(kind='bar', x='col1', y='col2', ylim=(0, 1.2), value_labels=True)

See also: https://stackoverflow.com/questions/58900736/adding-value-labels-to-hvplot-bar

If possible the default offset should also be a bit smart:

Screenshot 2019-11-17 at 16 24 49

Is there any solution to adding labels for each bar on your example, or maybe each bar with different colors?

andreale28 avatar Aug 29 '22 15:08 andreale28

Agreed; that would be a good feature. Does .plot support this? If so we can copy its interface.

jbednar avatar Aug 29 '22 20:08 jbednar

We can input a parameter c= in hvplot.bar(c='name-of-x-columns'). This is a trick/tip I have found to make hvplot.bar() display each bar with different colors and labels.

This trick/tip is from notebook

andreale28 avatar Sep 07 '22 16:09 andreale28