Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to add a constant line to hvplot

How to add a horizontal line to a hvplot ? Holoviews has .HLine and .VLine but not sure how to access it via pandas.hvplot or hvplot

here is a sample dataframe and plotting script.

import pandas as pd
import hvplot.pandas

df = pd.DataFrame({'A':[100], 'B':[20]})
df = df.reset_index()

print(df)
#   index   A       B
#0  0       100     20

# create plot
plot = df.hvplot.bar(y=['A', 'B'], x='index', 
              rot=0, subplots=False, stacked=True)

plot


enter image description here

like image 886
muon Avatar asked Jan 25 '23 15:01

muon


1 Answers

I would just overlay a holoviews hv.HLine() to your plot like so:

import holoviews as hv

your_hvplot * hv.HLine(60)

Using the * symbol in the code is an easy of putting the HLine on top of your other plot.
This is called an Overlay.


If you also need a label with your HLine, this SO question contains an example for that:
How do I get a full-height vertical line with a legend label in holoviews + bokeh?


Your sample code with the horizontal line would look like this then:

# import libraries
import pandas as pd
import hvplot.pandas
import holoviews as hv

# sample data
df = pd.DataFrame({'A':[100], 'B':[20]})

# create plot
plot = df.hvplot.bar(
    y=['A', 'B'], 
    stacked=True, 
    xaxis='', 
    title='Adding horizontal line hv.HLine() to plot with * overlay',
)

# create separate hline 
# for demonstration purposes I added some styling options
hline = hv.HLine(60)
hline.opts(
    color='red', 
    line_dash='dashed', 
    line_width=2.0,
)

# add hline to plot using * which overlays the hline on the plot
plot * hline

Final result:
adding hv.hline to hvplot

like image 120
Sander van den Oord Avatar answered Jan 29 '23 23:01

Sander van den Oord