hvplot
hvplot copied to clipboard
Add value labels of your data to hvplot by using parameter instead of hv.Labels()
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:
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')
I wasn't able to figure out the right hv.Labels
to overlay that would put the values at the top of the bars.
If this is agreed to be a good idea, I'd be happy to open a PR :)
Sounds good to me; I too have wanted this!
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:
Is there any solution to adding labels for each bar on your example, or maybe each bar with different colors?
Agreed; that would be a good feature. Does .plot support this? If so we can copy its interface.
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